开发喵星球

若依微服务集成多数据源(197)

在实际开发中,经常可能遇到在一个应用中可能需要访问多个数据库的情况,微服务版本采用了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();
   
分类:Java/OOP 作者:无限繁荣, 吴蓉 发表于:2024-05-03 01:19:37 阅读量:243
<<   >>


powered by kaifamiao