mybatis多数据源配置
mybatis多数据源配置
·
1. 创建配置类
1.1. 数据源一
@Configuration
@MapperScan(
basePackages = "com.test.aaa.db.service.repository",
sqlSessionFactoryRef = "aaaMysqlSqlSessionFactory"
)
public class AaaMysqlConfig {
@ConfigurationProperties(prefix = "spring.datasource.aaa")
@Primary
@Bean("aaaMysqlDataSource")
public DataSource mysqlDataSource(){
return DataSourceBuilder.create().build();
}
@Bean("aaaMysqlSqlSessionFactory")
@Primary
public SqlSessionFactory sqlSessionFactory(@Qualifier("aaaMysqlDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver()
.getResources("classpath:mapping/*Mapper.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean("aaaMysqlSqlSessionTemplate")
@Primary
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("aaaMysqlSqlSessionFactory")SqlSessionFactory sqlSessionFactory) throws Exception {
SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
return sqlSessionTemplate;
}
@Bean("aaaMysqlTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("aaaMysqlDataSource") DataSource dataSource){
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
return transactionManager;
}
}
1.2. 数据源二
@Configuration
@MapperScan(
basePackages = "com.test.bbb.aggregation.dao.db",
sqlSessionFactoryRef = "bbbMysqlSqlSessionFactory"
)
public class BbbMysqlConfig {
@ConfigurationProperties(prefix = "spring.datasource.bbb")
@Bean("bbbMysqlDataSource")
public DataSource mysqlDataSource(){
return DataSourceBuilder.create().build();
}
@Bean("bbbMysqlSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("bbbMysqlDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver()
.getResources("classpath:mapping/*Mapper.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean("bbbMysqlSqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("bbbMysqlSqlSessionFactory")SqlSessionFactory sqlSessionFactory) throws Exception {
SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
return sqlSessionTemplate;
}
@Bean("bbbMysqlTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("bbbMysqlDataSource") DataSource dataSource){
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
return transactionManager;
}
}
1.3. 配置文件
spring.datasource.aaa.jdbc-url=jdbc:mysql://{{ip}}:3306/{{database}}?useUnicode=true&characterEncoding=utf-8&serverTimezone=CTT&useSSL=false
spring.datasource.aaa.username={{userName}}
spring.datasource.aaa.password={{password}}
spring.datasource.bbb.jdbc-url=jdbc:mysql://{{ip}}:3306/{{database}}?characterEncoding=utf8
spring.datasource.bbb.username={{userName}}
spring.datasource.bbb.password={{password}}
2. 注意
- 配置类中需要有个类为主配置 即加 @Primary
- 多数据源时 url配置改为 jdbc-url
- 注意启动类中不要再有 @MapperScan 注解
- org.mybatis.spring.annotation.MapperScannerRegistrar是MapperScan 注解的处理类 可以debug一下
- 解析mapper.xml配置路径的时候可能会不对,可以考虑单独解析。
Resource[] mappingLocations = ArrayUtils.addAll(
new PathMatchingResourcePatternResolver()
.getResources("classpath:mapping/*.xml"),
new PathMatchingResourcePatternResolver().getResources("classpath:mapping/ext/*.xml"));
sqlSessionFactoryBean.setMapperLocations(mappingLocations);
更多推荐
所有评论(0)