配置的内容有:DataSource, SqlSessionFactory, DataSourceTransactionManager和SqlSessionTemplate。多数据源的情况下,需要指定Primary。
@Configuration
//basePackages:mapper接口类所在的包路径
@MapperScan(basePackages = "com.yh.dwdatalink.common.dal.mysqldatalink.mapper", sqlSessionTemplateRef = "datalinkSqlSessionTemplate")
public class DataSouceDatalinkConfig {
private final String mybatisConfig = "classpath:mybatis/mysql-datalink-mybatis-config.xml";
private final String sqlmap = "classpath:sqlmap/mysqldatalink/*.xml";
@Bean(name = "datalinkDataSource")
@ConfigurationProperties(prefix = "spring.datasource.datalink")
@Primary
public DataSource datalinkDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "datalinkSqlSessionFactory")
@Primary
public SqlSessionFactory datasourcelinkSqlSessionFactory(@Qualifier("datalinkDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource(mybatisConfig));
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(sqlmap));
bean.setDataSource(dataSource);
//保证jar模式运行
bean.setVfs(SpringBootVFS.class);
return bean.getObject();
}
@Bean(name = "datalinkTransactionManager")
@Primary
public DataSourceTransactionManager datalinkTransactionManager(@Qualifier("datalinkDataSource") DataSource dataSource) {
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource);
System.out.println("no primary: " + dataSourceTransactionManager);
return dataSourceTransactionManager;
}
@Bean(name = "datalinkSqlSessionTemplate")
@Primary
public SqlSessionTemplate datalinkSqlSessionTemplate(@Qualifier("datalinkSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
return sqlSessionTemplate;
}
}