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
在
ruoyi-common
模块的pom.xml
文件中引入 dynamic-datasource 依赖。
<!-- 动态数据源依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
在
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
为了验证 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
注解,开发者能够灵活地切换不同的数据源,从而简化多数据源操作。
这使得若依框架能够更加高效地处理多数据源场景,为企业级开发带来更优质的解决方案。
powered by kaifamiao