在开发过程中,常常会遇到需要在一个应用中访问多个数据库的场景。若依微服务版本通过使用 dynamic-datasource
动态多数据源组件,可以方便地实现这一需求。
首先,在对应的业务模块 pom.xml
文件中,添加 ruoyi-common-datasource
依赖,以便使用多数据源组件。
<!-- 若依通用数据源依赖 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-datasource</artifactId>
</dependency>
以 ruoyi-system
模块为例,使用 druid
数据库连接池配置主从数据库。其他数据源的配置可以参照组件文档进行。
# Spring 配置
spring:
datasource:
druid:
stat-view-servlet:
enabled: true
loginUsername: admin
loginPassword: 123456
dynamic:
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
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall,slf4j
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
datasource:
# 主数据库配置
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: password
# 从数据库配置
# slave:
# url:
# username:
# password:
# driver-class-name:
ruoyi-common-datasource
提供了数据源注解,用于指定使用的数据库源。项目默认提供了主库 (Master
) 和从库 (Slave
) 的注解,直接使用即可。根据实际需求,你也可以定义更多的数据源注解。
在需要切换数据源的方法或类上,使用对应的数据源注解。这样,方法在执行时会自动切换到指定的数据源。
@Master
public void insertA()
{
return xxxxMapper.insertXxxx();
}
@Slave
public void insertB()
{
return xxxxMapper.insertXxxx();
}
在某些场景下,可能需要手动进行数据源的切换,可以使用以下代码进行切换:
DynamicDataSourceContextHolder.push("slave"); // 手动切换到从库
// 执行业务逻辑
DynamicDataSourceContextHolder.clear(); // 清除数据源上下文,恢复到默认数据源
通过以上步骤,即可在若依微服务中实现多数据源的集成和切换,满足复杂业务场景的需求。
powered by kaifamiao