在实际开发中,经常可能遇到在一个应用中可能需要访问多个数据库的情况,微服务版本采用了dynamic-datasource
动态多数据源组件。
1、对应业务模块pom.xml
加入ruoyi-common-datasource
依赖
<!-- RuoYi Common DataSource -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-datasource</artifactId>
</dependency>
2、以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:
3、ruoyi-common-datasource定义数据源注解,对应datasource配置的不同数据源节点
项目默认了主Master从Slave注解可以直接使用,其他的可以根据项目实际情况去添加。
4、使用注解在需要切换数据源的方法上或类上。
@Master
public void insertA()
{
return xxxxMapper.insertXxxx();
}
@Slave
public void insertB()
{
return xxxxMapper.insertXxxx();
}
在某些情况可能需要手动切换数据源
DynamicDataSourceContextHolder.push("slave"); // 手动切换 ....业务逻辑 DynamicDataSourceContextHolder.clear();
powered by kaifamiao