集成 Dynamic-DataSource 实现多数据源增强
# 集成 Dynamic-DataSource 实现多数据源增强
Dynamic-DataSource
是一个基于 Spring Boot 的多数据源解决方案,支持数据源的动态切换、数据源分组、读写分离等功能。通过集成 Dynamic-DataSource
,可以简化多数据源的配置和管理,同时也可以删除原有的多数据源处理类。
# 1. 修改 pom.xml
添加 dynamic-datasource
依赖
首先,在 ruoyi-common/pom.xml
中添加 dynamic-datasource-spring-boot-starter
的依赖,以便支持多数据源功能。
<!-- 动态数据源 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
1
2
3
4
5
6
2
3
4
5
6
# 2. 删除原有多数据源处理类
在使用 Dynamic-DataSource
之前,需要删除以下原有的多数据源处理类,以避免冲突:
DruidConfig.java
DruidProperties.java
DynamicDataSource.java
DynamicDataSourceContextHolder.java
DataSourceAspect.java
这些类的位置在 ruoyi-framework\src\main\java\com\ruoyi\framework\config
和 ruoyi-framework\src\main\java\com\ruoyi\framework\datasource
目录下。
# 3. 修改数据源配置
将数据源配置集中在 application-druid.yml
文件中,使用 dynamic-datasource
的配置格式。
# spring配置
spring:
datasource:
druid:
stat-view-servlet:
enabled: true
loginUsername: ruoyi
loginPassword: 123456
dynamic:
druid:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
connect-timeout: 30000
socket-timeout: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
filters: stat,slf4j
connection-properties: 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.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: password
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 4. 使用 @DS
注解切换数据源
@DS
注解用于标识某个方法或类应该使用哪个数据源。在这里,我们可以在 SysConfigMapper
中使用 @DS("test")
注解来切换到 test
数据源。
package com.ruoyi.system.mapper;
import java.util.List;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.ruoyi.system.domain.SysConfig;
/**
* 参数配置 数据层
*
* 通过使用 @DS 注解,可以轻松切换到不同的数据源。
* 例如,这里所有操作都切换到名为 "test" 的数据源。
*
* @author ruoyi
*/
@DS("test")
public interface SysConfigMapper
{
/**
* 查询参数配置信息
*
* @param config 参数配置信息
* @return 参数配置信息
*/
public SysConfig selectConfig(SysConfig config);
/**
* 查询参数配置列表
*
* @param config 参数配置信息
* @return 参数配置集合
*/
public List<SysConfig> selectConfigList(SysConfig config);
/**
* 根据键名查询参数配置信息
*
* @param configKey 参数键名
* @return 参数配置信息
*/
public SysConfig checkConfigKeyUnique(String configKey);
/**
* 新增参数配置
*
* @param config 参数配置信息
* @return 结果
*/
public int insertConfig(SysConfig config);
/**
* 修改参数配置
*
* @param config 参数配置信息
* @return 结果
*/
public int updateConfig(SysConfig config);
/**
* 删除参数配置
*
* @param configId 参数主键
* @return 结果
*/
public int deleteConfigById(Long configId);
/**
* 批量删除参数配置
*
* @param configIds 需要删除的数据ID
* @return 结果
*/
public int deleteConfigByIds(String[] configIds);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# 5. 测试多数据源的切换
在项目中通过 @DS
注解切换数据源后,可以通过实际的操作来验证切换是否成功。例如,在参数管理模块中进行增删改查操作,观察是否数据写入到 test
数据源中。
# 6. 重要 API 和参数说明
@DS
:这是 Dynamic-DataSource 提供的核心注解,用于指定某个类或方法使用哪个数据源。注解的值是数据源的名称。spring.datasource.dynamic.datasource
:这是用来配置多个数据源的核心配置项。在这个配置项下,你可以定义多个数据源,并通过@DS
注解切换。filters
:Druid 连接池的配置,用于启用监控功能。
总结
通过集成 dynamic-datasource
,可以更轻松地管理和切换多个数据源,简化了多数据源的配置,并增强了数据源的扩展性和维护性。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08