若依(ruoyi)开源系统-多数据源问题踩坑实录
内容概要
上一节内容 介绍了用开源系统若依(ruoyi)搭建页面的过程。在实际项目中,经常遇到多数据源后者主从库的情况。本节记录若依多数据源配置过程中遇到的问题排查过程。
背景描述
1.上一节在ry-vue库中新建了表t_user,这次新建数据库jingyes,新加同样的表t_user。其他功能不变,我们将t_user数据源由ry-vue切换到jingyes库,实现简单的多数据源场景。
CREATE TABLE `t_user` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(30) NOT NULL DEFAULT '' COMMENT '姓名',
`age` int(11) NULL DEFAULT NULL COMMENT '年龄',
`gender` tinyint(2) NOT NULL DEFAULT 0 COMMENT '性别,0:女 1:男',
PRIMARY KEY (`id`)
) COMMENT = '用户表';
若依多数据源配置
官网教程操作若依多数据源配置
http://doc.ruoyi.vip/ruoyi/document/htsc.html#多数据源使用
- application-druid.yml 新增数据源配置
spring:
datasource:
jingyes:
url: jdbc:mysql://localhost:13306/jingyes?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
- 扩展DataSourceType枚举,新增数据源JINGYES
public enum DataSourceType
{
/**
* 主库
*/
MASTER,
/**
* 从库
*/
SLAVE,
JINGYES;
}
- 在目标方法设置注解 @DataSource
@Override
@DataSource(value = DataSourceType.JINGYES)
public List<TUser> selectTUserList(TUser tUser)
{
return tUserMapper.selectTUserList(tUser);
}
- 调整DruidConfig,新增数据源配置
@Bean
@ConfigurationProperties("spring.datasource.druid.jingyes")
@ConditionalOnProperty(prefix = "spring.datasource.druid.jingyes", name = "enabled", havingValue = "true")
public DataSource jingyesDataSource(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");
//这里新增自定义数据源
setDataSource(targetDataSources, DataSourceType.JINGYES.name(), "jingyesDataSource");
return new DynamicDataSource(masterDataSource, targetDataSources);
}
- 重启服务端项目
发现点击上一节创建的“外包用户管理”,显示“切换到JINGYES数据源”,然后实际上访问的仍然上MASTER数据源,也就是ry-vue库。(jingyes.t_user表目前还没有数据)

三、调试排查
跟踪调试一下,发现个问题,这里的targetDataSources居然只有Master,那put进去的其他两条呢?

终于被我找到了个若依的坑:这里的异常被吃掉了!!

暂时先打印下异常日志,看下到底什么情况,感觉快找到问题了。

上面命名定义了bean了,为什么会没有呢?返回去看看
@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);
}
原来是属性中enabled的原因,恍然大悟啊。
四、解决方案
最终解决的方式很简单,把application-druid.yml中jingyes数据源新增enabled=true。
spring:
datasource:
jingyes:
enabled: true #看这里!!
url: jdbc:mysql://localhost:13306/jingyes?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
重启服务端项目,再调试一下,发现可以取到正确的数据源了。

补充一点,@DataSource除了放在Service层,直接放在Mapper接口也是可以的。
@DataSource(value = DataSourceType.JINGYES)
public List<TUser> selectTUserList(TUser tUser);
本人公众号[ 敬YES ]同步更新,欢迎大家关注~

若依(ruoyi)开源系统-多数据源问题踩坑实录的更多相关文章
- Android 上传开源项目到 jcenter 实战踩坑之路
本文微信公众号「AndroidTraveler」首发. 背景 其实 Android 上传开源项目到 jcenter 并不是一件新鲜事,网上也有很多文章. 包括我本人在将开源项目上传到 jcenter ...
- XXLJOB2.1.0数据源配置踩坑记录
最近在看XXLJOB,因为截至到发文时间最新的版本是2.1.0而且需要建立的数据库与Quartz解耦了,所以就用了最新的版本. 首先说一下踩坑过程: 代码开发完成之后,在定时跑的时候第一次跑的多数失败 ...
- 诺依/RuoYi开源系统搭建总结
问题一:从{码云}下载下来看,输入项目编码不过 解决方法: 加入下列依赖,版本要和下载下来的{spring-boot-dependencies}一致.不一致就会报问题2: <parent> ...
- springboot-mybatis多数据源以及踩坑之旅
首先,springboot项目结构如下 springboot配置文件内容如下 动态数据源的配置类如下(必须保证能被ComponentScan扫描到): 1 package com.letzgo.con ...
- 开源虚拟机Bochs安装以及踩坑
因为想要写一个简单的操作系统,所以需要安装虚拟机来模拟出硬件,VMware不适合这个场景,因为会使用硬件级别的虚拟化,而bochs这个开源虚拟机,是用软件虚拟了所有的硬件,所以调试可以做到非常细的粒度 ...
- C#开源系统大汇总(个人收藏)
C#开源系统大汇总 一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖 ...
- Google 开发新的开源系统 Fuchsia
google 最新os 下载 https://github.com/fuchsia-mirror/magenta 本文转自:http://www.oschina.net/news/76094/goog ...
- 常用SNS开源系统比较
常用SNS开源系统比较 这 几天看了很多关于SNS(社交网络服务) 的东西..得到了不少启发..目前的IDEA是..可以在学校弄一个试试..主打的东西不能和现有的SNS冲突(如校内网).利用本地优势. ...
- WeChatAPI 开源系统架构详解
WeChatAPI 开源系统架构详解 如果使用WeChatAPI,它扮演着什么样的角色? 从图中我们可以看到主要分为3个部分: 1.业务系统 2.WeChatAPI: WeChatWebAPI,主要是 ...
- PHP聊天室开源系统workerman-chat
PHP聊天室开源系统workerman-chat (2015-01-23 09:07:50) 转载▼ http://www.workerman.net/ http://www.workerman.ne ...
随机推荐
- SPSS统计教程:卡方检验
本文简要的介绍了卡方分布.卡方概率密度函数和卡方检验,并通过SPSS实现了一个卡方检验例子,不仅对结果进行了解释,而且还给出了卡方.自由度和渐近显著性的计算过程.本文用到的数据"2.2.sa ...
- Java求数组元素的最大值和最小值
代码如下: public static void main(String[] args) { int [] a = {1,2,3,88,2,90}; int max = a[0]; int min = ...
- 【HDC.Cloud 2023】新鲜速递:从多元生态、开源到人才培养,让开发者成为决定性力量
摘要:华为云开发者联盟邀您一起回顾大会精彩时刻. 本文分享自华为云社区<[HDC.Cloud 2023]新鲜速递:从多元生态.开源到人才培养,让开发者成为决定性力量>,作者: 华为云社区精 ...
- 一文详解 Okio 输入输出流
在 OkHttp 的源码中,我们经常能看到 Okio 的身影,这篇文章,我们把Okio拿出来进行一个详细的介绍学习. 输入输出的概念简述 Okio 简介 工程中引入 Okio API 简介及使用介绍 ...
- 2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K, 判断该数组是否可以被分成一个或几个 长度至少 为 K 的 不相交的递增子序列。 输入:nums = [1,2,2,3,3,
2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K, 判断该数组是否可以被分成一个或几个 长度至少 为 K 的 不相交的递增子序列. 输入:nums = [1,2,2,3,3, ...
- Ubuntu16.04配置NTP时间同步
环境 查看系统版本:lsb_release -a 名词解释 PDT是指太平洋夏令时(Pacific Daylight Time),是美国西部地区和加拿大的一部分地区使用的时区.它位于UTC-7和UTC ...
- C++(继承)
继承 struct Person { int age; int sex; }; struct Teacher { int age; int sex; int level; int classId; } ...
- Blazor中如何呈现富文本/HTML
将需要显示字符串转换成MarkupString类型 @((MarkupString)htmlString) 参考文献 https://stackoverflow.com/questions/60167 ...
- 论文解读(BERT-DAAT)《Adversarial and Domain-Aware BERT for Cross-Domain Sentiment Analysis》
论文信息 论文标题:Adversarial and Domain-Aware BERT for Cross-Domain Sentiment Analysis论文作者:论文来源:2020 ACL论文地 ...
- Android Studio开发小项目
"莆仙小馆"--莆田文化展示APP 文化展示程序目的在于应用科学技术助推家乡优秀传统文化的展示与交流.通过图片.视频.音频等展示方式向用户立体地展示一个文化城邦.传统文化与科学技术 ...