开发喵星球

若依框架集成 dynamic-datasource 方案指南(337)

dynamic-datasource 是一个基于 Spring Boot 的高效集成工具,专为多数据源环境设计,提供了诸如数据源分组、加密数据库敏感信息、自定义注解支持、动态增删数据源、读写分离等功能。同时,支持本地和分布式事务方案(例如基于 Seata 的分布式事务)。其集成方案涵盖了 Mybatis-Plus、Quartz、ShardingJdbc 等常见组件,并简化了 Druid、HikariCp 等数据库连接池的配置与使用。

一、集成准备

在开始集成 dynamic-datasource 前,建议移除若依框架中的默认多数据源配置类文件,以避免冲突。

ruoyi-framework\src\main\java\com\ruoyi\framework\config\DruidConfig.java
ruoyi-framework\src\main\java\com\ruoyi\framework\config\properties\DruidProperties.java
ruoyi-framework\src\main\java\com\ruoyi\framework\datasource\DynamicDataSource.java
ruoyi-framework\src\main\java\com\ruoyi\framework\datasource\DynamicDataSourceContextHolder.java
ruoyi-framework\src\main\java\com\ruoyi\framework\aspectj\DataSourceAspect.java

二、详细集成步骤

1. 添加依赖

ruoyi-common 模块的 pom.xml 文件中引入 dynamic-datasource 依赖。

<!-- 动态数据源依赖 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>

2. 修改数据源配置

ruoyi-admin 模块中的 application-druid.yml 文件中,按照动态数据源的需求调整 Spring 数据源配置。

# Spring数据源配置
spring:
  datasource:
    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,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?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
          username: root
          password: password
        # 测试数据源配置
        test:
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
          username: root
          password: password

3. 验证多数据源切换

为了验证 dynamic-datasource 集成是否成功,我们可以通过修改 SysConfigMapper 中的方法,将操作切换到 test 数据源。

package com.ruoyi.system.mapper;

import java.util.List;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.ruoyi.system.domain.SysConfig;

/**
 * 参数配置 Mapper 接口
 */
public interface SysConfigMapper {

    /**
     * 查询参数配置信息
     * 
     * @param config 参数信息
     * @return 参数配置
     */
    @DS("test")
    public SysConfig selectConfig(SysConfig config);

    /**
     * 查询参数配置列表
     * 
     * @param config 参数信息
     * @return 参数配置列表
     */
    @DS("test")
    public List<SysConfig> selectConfigList(SysConfig config);

    /**
     * 根据键名查询参数配置信息
     * 
     * @param configKey 参数键名
     * @return 参数配置信息
     */
    @DS("test")
    public SysConfig checkConfigKeyUnique(String configKey);

    /**
     * 新增参数配置
     * 
     * @param config 参数信息
     * @return 插入结果
     */
    @DS("test")
    public int insertConfig(SysConfig config);

    /**
     * 修改参数配置
     * 
     * @param config 参数信息
     * @return 修改结果
     */
    @DS("test")
    public int updateConfig(SysConfig config);

    /**
     * 删除参数配置
     * 
     * @param configId 参数ID
     * @return 删除结果
     */
    @DS("test")
    public int deleteConfigById(Long configId);

    /**
     * 批量删除参数配置
     * 
     * @param configIds 参数ID数组
     * @return 批量删除结果
     */
    @DS("test")
    public int deleteConfigByIds(String[] configIds);
}

三、总结

通过以上步骤,您可以成功在若依框架中集成 dynamic-datasource,充分利用其提供的多数据源、读写分离及分布式事务等功能。同时,通过在业务层配置 @DS 注解,开发者能够灵活地切换不同的数据源,从而简化多数据源操作。

这使得若依框架能够更加高效地处理多数据源场景,为企业级开发带来更优质的解决方案。

   
分类:Java/OOP 作者:无限繁荣, 吴蓉 发表于:2024-09-20 15:25:51 阅读量:160
<<   >>


powered by kaifamiao