内容概要

上一节内容   介绍了用开源系统若依(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#多数据源使用

  1. 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
  1. 扩展DataSourceType枚举,新增数据源JINGYES
public enum DataSourceType
{
/**
* 主库
*/
MASTER, /**
* 从库
*/
SLAVE, JINGYES;
}
  1. 在目标方法设置注解 @DataSource
    @Override
@DataSource(value = DataSourceType.JINGYES)
public List<TUser> selectTUserList(TUser tUser)
{
return tUserMapper.selectTUserList(tUser);
}
  1. 调整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);
    }
  2. 重启服务端项目

    发现点击上一节创建的“外包用户管理”,显示“切换到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)开源系统-多数据源问题踩坑实录的更多相关文章

  1. Android 上传开源项目到 jcenter 实战踩坑之路

    本文微信公众号「AndroidTraveler」首发. 背景 其实 Android 上传开源项目到 jcenter 并不是一件新鲜事,网上也有很多文章. 包括我本人在将开源项目上传到 jcenter ...

  2. XXLJOB2.1.0数据源配置踩坑记录

    最近在看XXLJOB,因为截至到发文时间最新的版本是2.1.0而且需要建立的数据库与Quartz解耦了,所以就用了最新的版本. 首先说一下踩坑过程: 代码开发完成之后,在定时跑的时候第一次跑的多数失败 ...

  3. 诺依/RuoYi开源系统搭建总结

    问题一:从{码云}下载下来看,输入项目编码不过 解决方法: 加入下列依赖,版本要和下载下来的{spring-boot-dependencies}一致.不一致就会报问题2: <parent> ...

  4. springboot-mybatis多数据源以及踩坑之旅

    首先,springboot项目结构如下 springboot配置文件内容如下 动态数据源的配置类如下(必须保证能被ComponentScan扫描到): 1 package com.letzgo.con ...

  5. 开源虚拟机Bochs安装以及踩坑

    因为想要写一个简单的操作系统,所以需要安装虚拟机来模拟出硬件,VMware不适合这个场景,因为会使用硬件级别的虚拟化,而bochs这个开源虚拟机,是用软件虚拟了所有的硬件,所以调试可以做到非常细的粒度 ...

  6. C#开源系统大汇总(个人收藏)

    C#开源系统大汇总 一.AOP框架        Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖 ...

  7. Google 开发新的开源系统 Fuchsia

    google 最新os 下载 https://github.com/fuchsia-mirror/magenta 本文转自:http://www.oschina.net/news/76094/goog ...

  8. 常用SNS开源系统比较

    常用SNS开源系统比较 这 几天看了很多关于SNS(社交网络服务) 的东西..得到了不少启发..目前的IDEA是..可以在学校弄一个试试..主打的东西不能和现有的SNS冲突(如校内网).利用本地优势. ...

  9. WeChatAPI 开源系统架构详解

    WeChatAPI 开源系统架构详解 如果使用WeChatAPI,它扮演着什么样的角色? 从图中我们可以看到主要分为3个部分: 1.业务系统 2.WeChatAPI: WeChatWebAPI,主要是 ...

  10. PHP聊天室开源系统workerman-chat

    PHP聊天室开源系统workerman-chat (2015-01-23 09:07:50) 转载▼ http://www.workerman.net/ http://www.workerman.ne ...

随机推荐

  1. Cause: org.apache.ibatis.builder.BuilderException: Ambiguous collection type for property 'emps'. You must specify 'javaType' or 'resultMap'

    错误原因 这个错误通常表示在解析 Mybatis 映射文件(Mapper XML)时出现了问题,可能的原因有两个: 集合属性缺少 javaType 或 resultMap 属性:该错误信息显示了 &q ...

  2. 2 大数据实战系列-spark shell wordcount

    1 启动spark shell cd /home/data/app/hadoop/spark-2.1.1-bin-hadoop2.7/bin ./spark-shell --master spark: ...

  3. 用写代码的方式画图-试下PlantUML吧

    1 序言 所谓一图胜千言,大家平日在工作中编写文档时,往往都需要画各种图来表达中心思想,比如流程图.时序图.UML 图,很多人选择使用 Axure .PrecessOn.Diagrams(darw.i ...

  4. Istio 入门(三):体验 Istio、微服务部署、可观测性

    本教程已加入 Istio 系列:https://istio.whuanle.cn 目录 3,快速入门 书店微服务 预先准备 details 应用 ratings 应用 reviews v1/v2/v3 ...

  5. SaaS软件工程师成长路径

    背景 SaaS软件工程师的成长需要循序渐进,和SaaS业务一样有耐心.SaaS工程师需要在"业务"."技术"."管理"三个维度做好知识储备. ...

  6. C#选择排序(Selection Sort)算法

    选择排序原理介绍 选择排序(Selection Sort)是一种简单的排序算法,其实现原理如下: 遍历待排序数组,从第一个元素开始. 假设当前遍历的元素为最小值,将其索引保存为最小值索引(minInd ...

  7. quarkus实战之五:细说maven插件

    quarkus的maven插件非常重要,管理和构建工程时都离不开,本篇就来一起了解和掌握它 欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com ...

  8. P1880 [NOI1995] 石子合并 题解

    区间DP. 首先将其复制一遍(因为是环),也就是经典的破环成链. 设 \(f[i][j]\) 表示将 \(i\) 到 \(j\) 段的石子合并需要的次数. 有 \[f[i][j] = 0(i = j) ...

  9. 青少年CTF平台-Web-POST&GET

    题目描述 一星简单题,看我如何给你过了. 启动环境,等待三十秒先喝口水. 做题过程 访问题目地址,说让我们用GET方式提交一个名称为get且值为0的变量. 在URL后面加上?get=0,回车.已经成功 ...

  10. tcp3次握手

    tcp3次握手 1,三次握手流程图 2,三握手过程 当pc1想和pc2建立起连接时 pc1将连接信息写入报文 2.1,报文的序号(seq=x) 同步位(请求建立连接关系: SYN=1 ACK=0 控制 ...