SpringBoot 整合(Mybatis-plus)基于注解@DS,实现多数据源切换
·
一、导入依赖
##导入对应的数据库依赖oracle、mysql、clickhouse等。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
二、编写yml 配置文件
datasource:
dynamic:
druid:
initial-size: 5
min-idle: 5
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 6000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 60000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
# 主库数据源
master:
driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
url: jdbc:mysql://localhost:3306/table1?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
username: xxxx
password: xxxxx
validationQuery: SELECT 1 FROM DUAL
# 从库数据源**(这里是clickhouse)**
slave:
driver-class-name: ru.yandex.clickhouse.ClickHouseDriver
url: jdbc:clickhouse://XX.XX.XX:8123/XXXX
username: xxxx
password: xxxxx
validationQuery: SELECT 1
三、使用@DS注解时,有如下注意事项:
1.不能使用事务,否则数据源不会切换,使用的还是第一次加载的数据源;
2.第一次加载数据源之后,第二次、第三次…操作其它数据源,如果数据源不存在,使用的还是第一次加载的数据源;
3.数据源名称不要包含下划线,否则不能切换。
上面配置了两个数据源,master与slave,其中选择master作为默认数据源;
若想使用slave作为部分代码的数据源,可在ServiceImpl或者某个方法上做如下配置:
方式一:
@DS("slave")
public interface XxxxMapper extends BaseMapper<Xxxx> {
}
方式二:
@DS("slave")
@Override
public Result Xxxx() throws InterruptedException {
}
方式三:
@Override
public Result Xxxx() throws InterruptedException {
try {
//开启slave数据源
DynamicDataSourceContextHolder.push("slave");
} finally {
//关闭或释放slave数据源
DynamicDataSourceContextHolder.poll();
}
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)