先上Mybatis配置类:
@Configuration
@MapperScan(basePackages = "cn.test.dao.dmp", sqlSessionTemplateRef = "testSqlSessionTemplate")
public class TestDataSourceConfig {
@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) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mybatis/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);
}
}
一层一层注入,先创建DataSource,扫描application.properties的配置自动创建
然后分别注入到事务和SqlSessionFactory里
最后配置一下SqlSessionTemplate
因为是多数据源,每个bean最好都配置一下name,防止重复,其他数据源也是这么配置,修改下扫描地址,DataSource就可以了
声明事务时最好加上名称 比如 @Transactional("testTransactionManager")