多数据源配置
application.yml配置文件:
spring:
datasource:
one:
jdbc-url: jdbc:sqlserver://localhost:1433;DatabaseName=db
username: root
password: root
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
two: # 数据源2
jdbc-url: jdbc:sqlserver://localhost:1433;DatabaseName=db2
username: root
password: root
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
three:
jdbc-url: jdbc:sqlserver://localhost:1433;DatabaseName=db3
username: root
password: root
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
创建数据源配置类
OneDataSourceConfig类
/**
* @author miracle
*/
@Configuration
@MapperScan(basePackages = {"org.peak.miracle.db.dao"},
sqlSessionTemplateRef = "oneSqlSessionTemplate")
public class OneDataSourceConfig {
@Bean(name = "oneDataSource")
@ConfigurationProperties(prefix = "spring.datasource.one")
@Primary
public DataSource oneDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "oneSqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("oneDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:org/peak/miracle/db/dao/*.xml"));
return bean.getObject();
}
@Bean(name = "oneTransactionManager")
@Primary
public DataSourceTransactionManager testTransactionManager(@Qualifier("oneDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "oneSqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("oneSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
TwoDataSourceConfig类
/**
* @author miracle
*/
@Configuration
@MapperScan(basePackages = {"com.miracle.equipment.mapper.two"}, sqlSessionTemplateRef = "twoSqlSessionTemplate")
public class TwoDataSourceConfig {
@Bean(name = "twoDataSource")
@ConfigurationProperties(prefix = "spring.datasource.two")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "twoSqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("twoDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean ();
bean.setDataSource(dataSource);
bean.setPlugins(new Interceptor[]{new PaginationInterceptor()});
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/two/*.xml"));
return bean.getObject();
}
@Bean(name = "twoTransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("twoDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "twoSqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("twoSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
多个数据则对应创建配置类
业务实现层
transactionManager = "oneTransactionManager" 多数据源时需要指定事务管理器的bean的名字 注入事务管理器的bean时,默认是根据类型去注入,如果该类型有多个Bean,不通过bean的名字去注入,默认是会注入被@Primary标识的bean的.
@Service
public class workServiceImpl extends ServiceImpl<workMapper, work> implements IWorkService {
@Override
@Transactional(rollbackFor = Exception.class, transactionManager = "oneTransactionManager")
public void updateWork() {
...
}
}