环境:springBoot2.4.5 IDEA
数据库:Mysql8.0.21
主要任务:多数据源配置Hikari + MybatisPlus
项目结构
注意要点
两个数据源的mapperScan目录一定要分开,否则就会出现数据源1中的表去数据源2数据库中查询的情况
原因:在mapperScan的过程中会把扫描到的类归属于正在配置的某一个数据源,而不会智那区分
application.yml配置
spring:
datasource:
user:
jdbc-url: jdbc:mysql://localhost:3306/testOneDB?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&allowMultiQueries=true
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
hikari:
pool-name: testOneDB
maximum-pool-size: 15
max-lifetime: 180000
idle-timeout: 60000
connection-timeout: 20000
minimum-idle: 5
connection-test-query: SELECT 1
illust:
jdbc-url: jdbc:mysql://localhost:3306/testTwoDB?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&allowMultiQueries=true
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
hikari:
pool-name: testTwoDB
maximum-pool-size: 15
max-lifetime: 180000
idle-timeout: 60000
connection-timeout: 20000
minimum-idle: 5
connection-test-query: SELECT 1
mybatis-plus:
mapper-locations: classpath*:/mapper/*.xml
type-aliases-package: com.cloudrabbit.user.entity
数据源配置
数据源1
@Configuration
@MapperScan(basePackages = "com.cloudrabbit.user.mapper.illust", sqlSessionTemplateRef = "illustSessionTemplate")
public class IllustConfiguration {
@Bean
@ConfigurationProperties("spring.datasource.illust")
public HikariDataSource illustDataSource(){
return new HikariDataSource();
}
@Bean
public SqlSessionFactory illustSessionFactory(@Qualifier("illustDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean
public DataSourceTransactionManager illustTransactionManager(@Qualifier("illustDataSource") DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean
public SqlSessionTemplate illustSessionTemplate(@Qualifier("illustSessionFactory") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
数据源2
@Configuration
@MapperScan(basePackages = "com.cloudrabbit.user.mapper.user", sqlSessionTemplateRef = "userSessionTemplate")
public class UserConfiguration {
@Bean
@ConfigurationProperties("spring.datasource.user")
public HikariDataSource userDataSource(){
return new HikariDataSource();
}
@Bean
public SqlSessionFactory userSessionFactory(@Qualifier("userDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean
public DataSourceTransactionManager userTransactionManager(@Qualifier("userDataSource") DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean
public SqlSessionTemplate userSessionTemplate(@Qualifier("userSessionFactory") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}