SpringBoot多数据源配置
在mysql数据库基础上增加对Oracle数据库的支持
oracle驱动
<!-- oracle驱动-->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
ymal配置
spring:
datasource:
mysql:
jdbc-url: jdbc:mysql://127.0.0.1:3306/mysqlTest?serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL&allowMultiQueries=true
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
oracle:
jdbc-url: jdbc:oracle:thin:@//127.0.0.1:1521/oracleTest
username: admin
password: 123456
driver-class-name: oracle.jdbc.OracleDriver
connection-test-query: SELECT * from dual
注意:不同版本Oracle驱动版本对应不同jdbc-url格式对应
mysql数据源配置
@Configuration
@MapperScan(basePackages = "com.erp.xxx.mapper", sqlSessionTemplateRef = "mysqlJdbcTemplate")
public class MysqlDataSourceConfig {
@Bean(name = "mysqlDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.mysql")
public DataSource oracleDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "mySqlSessionFactory")
public SqlSessionFactoryBean sqlSessionFactory(@Qualifier("mysqlDataSource") DataSource datasource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
// 设置数据源
sqlSessionFactoryBean.setDataSource(datasource);
sqlSessionFactoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
//这里将下划线映射为驼峰的配置引入
sqlSessionFactoryBean.setConfiguration(globalConfiguration());
return sqlSessionFactoryBean;
}
@Bean(name = "mysqlJdbcTemplate")
public SqlSessionTemplate mySqlJdbcTemplate(@Qualifier("mySqlSessionFactory") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
// 测试返现多数据源配置导致数据查询映射关系失效,需重新加载mybatis配置
@Bean("mybatisConfiguration")
@ConfigurationProperties(prefix = "mybatis.configuration")
public org.apache.ibatis.session.Configuration globalConfiguration() {
return new org.apache.ibatis.session.Configuration();
}
注意:配置后导致字段映射失效, 需要增加配置 : sqlSessionFactoryBean.setConfiguration(globalConfiguration());
Oracle数据源配置
@Configuration
@MapperScan(basePackages = "com.erp.xxx.mapper.oracleMapper", sqlSessionTemplateRef = "oracleJdbcTemplate")
public class OracleDataSourceConfig {
@Bean(name = "oracleDataSource")
@ConfigurationProperties(prefix = "spring.datasource.oracle")
public DataSource oracleDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "oracleSqlSessionFactory")
public SqlSessionFactoryBean sqlSessionFactory(@Qualifier("oracleDataSource") DataSource datasource) throws IOException {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(datasource);
sqlSessionFactoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/OracleMapper/*.xml"));
sqlSessionFactoryBean.setConfiguration(globalConfiguration());
return sqlSessionFactoryBean;
}
@Bean(name = "oracleJdbcTemplate")
public SqlSessionTemplate oracleJdbcTemplate(@Qualifier("oracleSqlSessionFactory") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
@Qualifier("mybatisConfiguration")
public org.apache.ibatis.session.Configuration globalConfiguration() {
return new org.apache.ibatis.session.Configuration();
}
}
多数据源使用
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class xxxServiceImpl implements xxxService {
@Qualifier("oracleDataSource")
private final OracleMapper oracleMapper ;
@Qualifier("mysqlDataSource")
private final MysqlMapper mysqlMapper;
/*
业务代码片段
*/
}