BaseDataSourceConfig.java
/**
* 基础数据源配置
*/
public abstract class BaseDataSourceConfig {
/**
* 获得sqlSessionFactory
*
* @param datasource: 数据源
* @param locationPattern: mapper路径
* @return org.apache.ibatis.session.SqlSessionFactory
**/
public SqlSessionFactoryBean getSqlSessionFactory(DataSource datasource, String locationPattern) throws Exception {
Configuration configuration = new Configuration();
return new SqlSessionFactoryBean() {{
setDataSource(datasource);
setConfiguration(configuration);
setMapperLocations(new PathMatchingResourcePatternResolver().getResources(locationPattern));
}};
}
/**
* @Bean 注册Bean对象
* @Primary 表示默认数据源
* @ConfigurationProperties 读取properties中的配置参数映射成为一个对象
*/
public abstract HikariDataSource getDateSource();
/**
* @param dataSource 数据源
* @return SqlSessionFactory
* @Primary 默认SqlSessionFactory
*/
public abstract SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception;
/**
* 初始化SqlSessionTemplate
*
* @param sqlSessionFactory:
* @return org.mybatis.spring.SqlSessionTemplate
**/
public abstract SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory);
/**
* 事务管理器
*
* @param dataSource: 数据源
* @return org.springframework.jdbc.datasource.DataSourceTransactionManager
**/
public abstract DataSourceTransactionManager transactionManager(DataSource dataSource);
}
ADataSourceConfig.java
/**
* a数据库数据源
*/
@Configuration
@MapperScan(basePackages = "show.lmm.demo.**.mapper.a", sqlSessionFactoryRef = "aSqlSessionFactory")
public class ADataSourceConfig extends BaseDataSourceConfig {
/**
* @Bean 注册Bean对象
* @Primary 表示默认数据源
* @ConfigurationProperties 读取properties中的配置参数映射成为一个对象
*/
@Override
@Primary
@Bean(name = "aDataSource")
@ConfigurationProperties(prefix = "spring.datasource.a")
public HikariDataSource getDateSource() {
return new HikariDataSource();
}
/**
* @param dataSource 数据源
* @return SqlSessionFactory
* @Primary 默认SqlSessionFactory
*/
@Override
@Primary
@Bean(name = "aSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("aDataSource") DataSource dataSource) throws Exception {
return getSqlSessionFactory(dataSource, "classpath*:mapper/a/*.xml").getObject();
}
@Override
@Primary
@Bean("aSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("aSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
/**
* a数据源事务管理器
*
* @param dataSource: 数据源
* @return org.springframework.jdbc.datasource.DataSourceTransactionManager
**/
@Bean(name = TransactionManagerConstant.A_TRANSACTION_MANAGER)
@Override
@Primary
public DataSourceTransactionManager transactionManager(@Qualifier("aDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
BDataSourceConfig.java
@Configuration
@MapperScan(basePackages = "show.lmm.demo.**.mapper.b",
sqlSessionFactoryRef = "bSqlSessionFactory")
public class BDataSourceConfig extends BaseDataSourceConfig {
/**
* @Bean 注册Bean对象
* @Primary 表示默认数据源
* @ConfigurationProperties 读取properties中的配置参数映射成为一个对象
*/
@Override
@Bean(name = "bDataSource")
@ConfigurationProperties(prefix = "spring.datasource.b")
public HikariDataSource getDateSource() {
return new HikariDataSource();
}
/**
* @param dataSource 数据源
* @return SqlSessionFactory
* @Primary 默认SqlSessionFactory
*/
@Override
@Bean(name = "bSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("bDataSource") DataSource dataSource) throws Exception {
return getSqlSessionFactory(dataSource, "classpath*:mapper/b/*.xml").getObject();
}
@Override
@Bean("bSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("bSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
/**
* b数据源事务管理器
*
* @param dataSource: 数据源
* @return org.springframework.jdbc.datasource.DataSourceTransactionManager
**/
@Bean(name = TransactionManagerConstant.B_TRANSACTION_MANAGER)
@Override
public DataSourceTransactionManager transactionManager(@Qualifier("bDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
示例
https://gitee.com/luoye/examples/tree/main/springboot-mybatis-multi-datasource