SpringBoot mybatis基于注解的方式实现多数据源配置
当项目需要使用到两个或多个数据源时,就需要采用多数据源配置了
第一步 修改配置文件
spring:
datasource:
dbcp1: #第一个数据源
driver_class_name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://127.0.0.1:3306/shop
username: root
password: root
dialect: mysql
dbcp2: #第二个数据源
driver_class_name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://127.0.0.1:3306/shorp1
username: root
password: root
dialect: mysql
dbcp3: #第三个数据源
driver_class_name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://127.0.0.1:3306/shop2
username: root
password: root
dialect: mysql
druid: #druid配置
# 连接池的配置信息
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
配置了三个数据源 建议从两个开始(虽然三个也没差别)
第二步:实现基于注解数据源动态切换
DataSourceConfig负责加载配置文件中数据源的配置信息
package com.shop.config;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
@Configuration
//@RefreshScope
public class DataSourceConfig {
//数据源1
@Bean(name = "dbcp1")
@ConfigurationProperties(prefix = "spring.datasource.dbcp1") // application.properteis中对应属性的前缀
public DataSource dataSource1() {
return DataSourceBuilder.create().build();
}
//数据源2
@Bean(name = "dbcp2")
@ConfigurationProperties(prefix = "spring.datasource.dbcp2") // application.properteis中对应属性的前缀
public DataSource dataSource2() {
return DataSourceBuilder.create().build();
}
//数据源2
@Bean(name = "dbcp3")
@ConfigurationProperties(prefix = "spring.datasource.dbcp3") // application.properteis中对应属性的前缀
public DataSource dataSource3() {
return DataSourceBuilder.create().build();
}
/**
* 动态数据源: 通过AOP在不同数据源之间动态切换
* @return
*/
@Primary
@Bean(name = "dynamicDataSource")
public DataSource dynamicDataSource() {
DynamicDS dynamicDS = new DynamicDS();
// 默认数据源
// dynamicDataSource.setDefaultTargetDataSource(dataSource1());
// 配置多数据源
Map<Object, Object> dsMap = new