背景
实际业务中,用到多数据源的情况很普遍,笔者就以实际业务场景中的需要操作两个数据源的情况,做一次总结。
实现代码
1、首先排除 自动加载注解
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class })
public class SpringbootMultidatabaseApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMultidatabaseApplication.class, args);
}
}
2、配置数据源信息
@Configuration
@MapperScan(basePackages = "com.io.springbootmultidatabase.mapper.master", sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
@Bean(name = "masterDataSource")
@ConfigurationProperties("datasource.master")
public DataSource masterDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "masterSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/master/*.xml"));
return sessionFactoryBean.getObject();
}
}
@Configuration
@MapperScan(basePackages = "com.io.springbootmultidatabase.mapper.slave", sqlSessionFactoryRef = "masterSqlSessionFactory")
public class SlaveSourceConfig {
@Bean(name = "slaveDataSource")
@ConfigurationProperties("datasource.slave")
public DataSource slaveDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "slaveSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/slave/*.xml"));
return sessionFactoryBean.getObject();
}
}
特别注意上面 mapper 的路径!!
参考代码路径:https://github.com/shihongwei/springboot-multidatabase