若依ruoyi框架增加2个以上的数据源配置

1.配置application.yml文件

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 数据库配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
url: jdbc:mysql://xxx/xxx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: xxx
password: xxx
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: true
url: jdbc:mysql://xxx/xxx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true
username: xxx
password: xxx
# 这里就是新增加的数据源,比如是chatgpt库名
chatgpt:
# 从数据源开关/默认关闭
enabled: true
url: jdbc:mysql://xxx/chatgpt?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true
username: chatgpt
password: chatgpt

2.增加枚举DataSourceType

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.ruoyi.common.enums;

/**
* 数据源
*
* @author ruoyi
*/
public enum DataSourceType
{
/**
* 主库
*/
MASTER,

/**
* 从库
*/
SLAVE,
/**新增加的库枚举*/
CHATGPT
}

3.修改数据源加载DruidConfig(

1
com.auseft.framework.config

)(只有2个库就不需要改,系统一般默认带一个master和一个slave,多于2个的时候需要添加第三个库)

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
@Configuration
public class DruidConfig
{
@Bean
@ConfigurationProperties("spring.datasource.druid.master")
public DataSource masterDataSource(DruidProperties druidProperties)
{
DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
return druidProperties.dataSource(dataSource);
}

@Bean
@ConfigurationProperties("spring.datasource.druid.slave")
@ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true")
public DataSource slaveDataSource(DruidProperties druidProperties)
{
DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
return druidProperties.dataSource(dataSource);
}

//初始化将新的数据源druid对象,上面两个是原来的2个数据源,拷贝改
@Bean
@ConfigurationProperties("spring.datasource.druid.chatgpt")
@ConditionalOnProperty(prefix = "spring.datasource.druid.chatgpt", name = "enabled", havingValue = "true")
public DataSource chatgptDataSource(DruidProperties druidProperties)
{
DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
return druidProperties.dataSource(dataSource);
}

@Bean(name = "dynamicDataSource")
@Primary
public DynamicDataSource dataSource(DataSource masterDataSource)
{
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource);
setDataSource(targetDataSources, DataSourceType.SLAVE.name(), "slaveDataSource");
//将新的数据源对象加载到DataSource去
setDataSource(targetDataSources, DataSourceType.CHATGPT.name(), "chatgptDataSource");
return new DynamicDataSource(masterDataSource, targetDataSources);
}

//...
}

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/csdn_avatar_2019/article/details/134501425

4.编写测试Mapper

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.ruoyi.xxx.mapper;

import com.ruoyi.common.annotation.DataSource;
import com.ruoyi.common.enums.DataSourceType;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@Component
public interface TestChatgptMapper {

//切换数据源就用这个注解,跟框架自带的2个使用方式没有差别
//假设chatgpt数据库用有个user表可以拿来查询
@DataSource(value= DataSourceType.CHATGPT)
@Select("select * from user")
List<Map> selectAll();

}

5.编写测试类使用

1
2
3
4
5
6
7
8
9
//...
@Autowired
private TestChatgptMapper testChatgptMapper;
@Test
void test7(){
List<Map> res = testChatgptMapper.selectAll();
System.out.println(res.toString());
}
//...

若依ruoyi框架增加2个以上的数据源配置
http://wizhiai.github.io/p/033c29903cc345c2951bb18f93fe2456/
作者
胡礼节
发布于
2024年8月13日
许可协议