- yml文件配置多数据源
server:
servlet:
context-path: /xxx/api
port: 8080
spring:
datasource:
test1:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc-url: jdbc:sqlserver://ip1:1433;databaseName=test1
username: username
password: pwd*****
test2:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc-url: jdbc:sqlserver://ip2:1433;databaseName=test2
username: username
password: pwd*****
jackson:
time-zone: Asia/Shanghai
date-format: yyyy-MM-dd HH:mm:ss
mybatis:
#mybatis扫描xml文件
mapper-locations: classpath*:mapper/**/*Mapper.xml
configuration:
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
log-prefix: org.apache.ibatis.
- 多数据源对应的配置类
1、Test1DataSourceConfig.java
@Configuration
@MapperScan(basePackages = "com.xxx.xx.mapper.test1", sqlSessionFactoryRef = "test1SqlSessionFactory")
public class Test1DataSourceConfig {
@Bean("test1DataSource")
@ConfigurationProperties("spring.datasource.test1")
public DataSource getDataSource() {
return DataSourceBuilder.create().build();
}
@Bean("test1SqlSessionFactory")
public SqlSessionFactory getSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/test1/*Mapper.xml"));
return bean.getObject();
}
@Bean("test1SqlSessionTemplate")
public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean(name = "test1TransactionManager")
@Primary
public DataSourceTransactionManager test1TransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
2、Test2DataSourceConfig.java
@Configuration
@MapperScan(basePackages = "com.xxx.xx.mapper.test2", sqlSessionFactoryRef = "test2SqlSessionFactory")
public class Test2DataSourceConfig {
@Bean("test2DataSource")
@ConfigurationProperties("spring.datasource.test2")
public DataSource getDataSource() {
return DataSourceBuilder.create().build();
}
@Bean("test2SqlSessionFactory")
public SqlSessionFactory getSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/test2/*Mapper.xml"));
return bean.getObject();
}
@Bean("test2SqlSessionTemplate")
public SqlSessionTemplate getSqlSessionTemplate(@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean(name = "test2TransactionManager")
public DataSourceTransactionManager test2TransactionManager(@Qualifier("test2DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
- 启动类开始事务处理
@SpringBootApplication
//开启事务处理
@EnableTransactionManagement
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4、在Service中使用
@Transactional(transactionManager = "test1TransactionManager", rollbackFor = Exception.class)
public String test1() {
...
}
@Transactional(transactionManager = "test2TransactionManager", rollbackFor = Exception.class)
public String test2() {
...
}