Java配置双数据源
1.MysqlDatasourceConfig
@Configuration
@MapperScan(basePackages = MysqlDatasourceConfig.PACKAGE, sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MysqlDatasourceConfig {
@Autowired
private PageConfig config;
/**mysqldao扫描路径*/
static final String PACKAGE = "org/cfang/modules/**/mapper";
/**mybatis mapper扫描路径*/
static final String MAPPER_LOCATION = "org/cfang/modules/**/mapper/*.xml";
/**
* 拿到DataSource
* @ConfigurationProperties 获取 配置文件 spring.datasource.druid.mysql下的值
* @return
*/
@Primary
@Bean(name = "mysqldatasource")
@ConfigurationProperties("spring.datasource.druid.mysql")
public DataSource mysqlDataSource() {
DruidDataSource dataSource= DruidDataSourceBuilder.create().build();
return dataSource;
}
/**
* 配置事务 Primary注解是以这个为主数据源
* @return
*/
@Bean(name = "mysqlTransactionManager")
@Primary
public DataSourceTransactionManager mysqlTransactionManager() {
return new DataSourceTransactionManager(mysqlDataSource());
}
@Bean(name = "mysqlSqlSessionFactory")
@Primary
public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqldatasource") DataSource dataSource)
throws Exception {
// final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
// 设置mybatis-plus分页插件
sessionFactory.setPlugins(config.paginationInterceptor());
//如果不使用xml的方式配置mapper,则可以省去下面这行mapper location的配置。
sessionFactory.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources(MysqlDatasourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
2.OracleDatasourceConfig
@Configuration
@MapperScan(basePackages = OracleDatasourceConfig.PACKAGE,
sqlSessionFactoryRef = "oracleSqlSessionFactory")
public class OracleDatasourceConfig {
@Autowired
private PageConfig config;
/**oralce扫描路径*/
static final String PACKAGE = "org/cfang/modules/**/hisMapper";
/**mybatis mapper扫描路径*/
static final String MAPPER_LOCATION = "org/cfang/modules/**/hisMapper/*.xml";
@Bean(name = "oracledatasource")
@ConfigurationProperties("spring.datasource.druid.oracle")
public DataSource oracleDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "oracleTransactionManager")
public DataSourceTransactionManager oracleTransactionManager() {
return new DataSourceTransactionManager(oracleDataSource());
}
@Bean(name = "oracleSqlSessionFactory")
public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracledatasource") DataSource dataSource) throws Exception {
// final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
// 设置mybatis-plus分页插件
sessionFactory.setPlugins(config.paginationInterceptor());
//如果不使用xml的方式配置mapper,则可以省去下面这行mapper location的配置。
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(OracleDatasourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
3.PageConfig
@Configuration
public class PageConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
注意事项:
1.配置双数据源后 Application 中 @MapperScan 扫描路径要去掉,不然会冲突,导致找不到数据源
2.mybatis-plus分页插件会无法使用 解决办法:
1.mybatis-plus分页插件配置类 —— PageConfig
2.mysql数据源配置工具类,添加mybatis-plus分页插件