application.yml:
spring:
datasource:
test:
username: xxx
password: xxx
driverClassName: xxx
jdbc-url: xxx # 多数据源需要jdbc-url 单数据源url
wf:
username: xxs
password: xxs
driverClassName: xxs
jdbc-url: xxs # 多数据源需要jdbc-url 单数据源url
# 多数据源需要分别单设置参数
mybatis:
configuration:
test:
map-underscore-to-camel-case: true # 驼峰
use-generated-keys: true # id回显
wf:
map-underscore-to-camel-case: true
use-generated-keys: true
DataSourceConfigTest:
/**
* @author kun.han
*/
@Configuration
@MapperScan(basePackages = "com.test.demo.mapper.test", sqlSessionTemplateRef = "testSqlSessionTemplate")
public class DataSourceConfigTest {
@Bean(name = "testConfiguration")
@ConfigurationProperties(prefix = "mybatis.configuration.test")
public org.apache.ibatis.session.Configuration configuration(){
return new org.apache.ibatis.session.Configuration();
}
@Bean(name = "testDataSource")
@ConfigurationProperties(prefix = "spring.datasource.test")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "testSqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("testDataSource") DataSource dataSource,@Qualifier("testConfiguration") org.apache.ibatis.session.Configuration configuration) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setConfiguration(configuration);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/test/*.xml"));
return bean.getObject();
}
@Bean(name = "testTransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("testDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "testSqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("testSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
DataSourceConfigWF
/**
* @author kun.han
*/
@Configuration
@MapperScan(basePackages = "com.test.demo.mapper.wf", sqlSessionTemplateRef = "wfSqlSessionTemplate")
public class DataSourceConfigWF {
@Bean(name = "wfConfiguration")
@ConfigurationProperties(prefix = "mybatis.configuration.wf")
@Primary
public org.apache.ibatis.session.Configuration configuration(){
return new org.apache.ibatis.session.Configuration();
}
@Bean(name = "wfDataSource")
@ConfigurationProperties(prefix = "spring.datasource.wf")
@Primary
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "wfSqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("wfDataSource") DataSource dataSource,@Qualifier("wfConfiguration") org.apache.ibatis.session.Configuration configuration) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setConfiguration(configuration);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/wf/*.xml"));
return bean.getObject();
}
@Bean(name = "wfTransactionManager")
@Primary
public DataSourceTransactionManager testTransactionManager(@Qualifier("wfDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "wfSqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("wfSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
mapper 和 .xml:
不同数据源的mapper和xml放在不同的包下
在以上配置代码中均有配置:
事务 (仅单个数据源的事务)
需指定事务管理器
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, value = "testTransactionManager")
value属性,事务管理器已在上述配置代码中配置: