多数据源不同于动态数据源
多数据源就是在一个应用中配置多个不同的连接池,连接不同的数据库。即在xml中配置多个sqlSessionFactory,或是写配置类,但这种情况会造成如果应用中数据源比较多,那么建立的多个连接池就会在一定程度上消耗资源(资源宝贵呀),不过个人理解比较少的数据源建立多数据源还是可以接受的。
步骤:
1.在.yml文件中配置数据源连接信息。
spring:
datasource:
wms:
wmsDbUser: test
wmsDbHost: 127.0.0.1
dbType: 1
wmsDbInstance: test
jdbcUrl: jdbc:oracle:thin:@127.0.0.1:1521:test
local:
localDbUser: system
DbPassword: 123456
localDbHost: 127.0.0.1
localDbInstance: orcl
jdbcUrl: jdbc:oracle:thin:@127.0.0.1:1521/orcl
ps: jdbcUrl最后面是 ‘/’ 还是 ‘:’ ,取决于后面的orcl是服务名,还是sid。
服务名是斜杠,sid是冒号。
2.编写配置类sqlSessionFactory
每一个数据源对应一个配置类。
@Configuration
@MapperScan(basePackages = "com.demo.timetask.wms_p_wmsdb_duanxin_bmsxywebdb.local.mapper", sqlSessionFactoryRef = "localSqlSessionFactory")
public class SqlSessionFactory_Local {
@Value("${spring.datasource.local.localDbHost}")
private String ipAddress;
@Value("${spring.datasource.local.localDbUser}")
private String dbUser;
@Value("${spring.datasource.bms.dbType}")
private String dbType;
@Value("${spring.datasource.local.localDbInstance}")
private String dbInstance;
@Value("${spring.datasource.local.jdbcUrl}")
private String jdbcUrl;
@Value("${spring.datasource.local.DbPassword}")
private String password;
@Bean(name = "localDataSource")
public DataSource getDateSourceMed() {
return DataSourceBuilder.create().password(password).url(jdbcUrl).username(dbUser).driverClassName("oracle.jdbc.driver.OracleDriver").build();
}
@Bean(name = "localSqlSessionFactory")
public SqlSessionFactory medSqlSessionFactory(@Qualifier("localDataSource") DataSource datasource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
bean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/localMappers/*.xml"));
return bean.getObject();
}
@Bean("localSqlSessionTemplate")
public SqlSessionTemplate medSqlSessionTemplate(
@Qualifier("localSqlSessionFactory") SqlSessionFactory sessionFactory) {
return new SqlSessionTemplate(sessionFactory);
}
}
ps:属性注入可以有多种注入方式。如下:
@Bean(name = "localDataSource")
// 表示这个数据源是默认数据源
@Primary
// 读取application.properties中的配置参数映射成为一个对象
// prefix表示参数的前缀
@ConfigurationProperties(prefix = "spring.datasource.local")
public DataSource getDateSourceMed() {
return DataSourceBuilder.create().build();
}
评论前必须登录!
注册