若依(ruoyi)开源系统-多数据源问题踩坑实录

这篇具有很好参考价值的文章主要介绍了若依(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#多数据源使用

  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表目前还没有数据)
    若依(ruoyi)开源系统-多数据源问题踩坑实录

调试排查

跟踪调试一下,发现个问题,这里的targetDataSources居然只有Master,那put进去的其他两条呢?
若依(ruoyi)开源系统-多数据源问题踩坑实录

终于被我找到了个若依的坑:这里的异常被吃掉了!!
若依(ruoyi)开源系统-多数据源问题踩坑实录

暂时先打印下异常日志,看下到底什么情况,感觉快找到问题了。
若依(ruoyi)开源系统-多数据源问题踩坑实录

上面命名定义了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

重启服务端项目,再调试一下,发现可以取到正确的数据源了。
若依(ruoyi)开源系统-多数据源问题踩坑实录

补充一点,@DataSource除了放在Service层,直接放在Mapper接口也是可以的。

    @DataSource(value = DataSourceType.JINGYES)
    public List<TUser> selectTUserList(TUser tUser);

QQ技术交流群: 928981528

本人公众号[ 敬YES ]同步更新,欢迎大家关注~

若依(ruoyi)开源系统-多数据源问题踩坑实录文章来源地址https://www.toymoban.com/news/detail-711697.html

到了这里,关于若依(ruoyi)开源系统-多数据源问题踩坑实录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • RuoYi-Vue-generator 代码生成模块 动态 多数据源切换 前端+后台

    RuoYi-Vue-generator 代码生成模块 动态 多数据源切换 前端+后台

    需求场景: 若依框架的30张数据表 和 业务使用的数据表,同数据源,但分开的两个库,原生若依只支持主库的代码生成,故自己修改添加代码来实现 若依多数据源的使用 修改页面ruoyi-uisrcviewstoolgenimportTable.vue el-form 中新增 el-form-item 添加 data 添加方法 ruoyi-uisrcapitool

    2024年02月04日
    浏览(10)
  • 若依(ruoyi)开源系统保姆级实践-完成第一个页面

    若依(ruoyi)开源系统保姆级实践-完成第一个页面

    若依官网文档地址:http://doc.ruoyi.vip/ruoyi/document/hjbs.html 本教程主要内容,自定义数据库表,使用若依开源系统生成代码并配置权限。 若依环境配置 新建数据表t_user,利用若依代码生成工具生成服务端及页面代码。 菜单配置 权限配置 选用ry-vue版本,项目地址:https://gitee.c

    2024年02月08日
    浏览(8)
  • 开源项目学习:若依RuoYi-Vue后台管理系统【环境搭建】

    开源项目学习:若依RuoYi-Vue后台管理系统【环境搭建】

    第一章 环境搭建 第二章 项目运行 第三章 阅读源码:例子-新增用户接口 第四章 基于ruoyi-vue开发新项目 本文尽量贴近零基础入门,献给初入门的学弟学妹们! 文章基本流程:环境配置→运行项目→阅读源码 安装环境时最好修改安装路径! Java开发必备! JDK下载:http://www

    2023年04月19日
    浏览(12)
  • 数据源使用问题记录

     \\\"Zero date value prohibited\\\"  url上拼接 zeroDateTimeBehavior=convertToNull com.alibaba.druid.pool.DruidDataSource : create connection Error java.lang.ExceptionInInitializerError: null at com.mysql.jdbc.Util.stackTraceToString(Util.java:378) at com.mysql.jdbc.Util.(Util.java:121) at com.mysql.jdbc.NonRegisteringDriver.parseURL(NonRegistering

    2024年02月20日
    浏览(14)
  • 解决WPF绑定数据源,数据更新,UI不更新的问题

    XAML中已经设置 View中已经实现IDisposable接口。 ViewModel中已经实现INotifyPropertyChanged接口方法RaisePropertyChanged。 Model中已经配置TextValue 如果已经正确设置Model与ViewModel的 INotifyPropertyChanged ,且Model中的数据可以执行 RaisePropertyChanged ,但此时UI仍不能更新,请检查View中是否 DataCont

    2024年02月14日
    浏览(11)
  • 分享一个优秀的动态数据源开源库-dynamic-datasource-spring-boot-starter

    分享一个优秀的动态数据源开源库-dynamic-datasource-spring-boot-starter

    在我们的Java后端研发工作中, 有时候由于业务的快速迭代和数据的安全隔离性,往往会为不同的 API业务线分配不同的数据库,即一个微服务经常需要和多个数据源打交道。 dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。 其支持 Jdk 1.7+, Spring

    2024年02月12日
    浏览(9)
  • 解决多数据源的事务问题 - 基于springboot--mybatis

    解决多数据源的事务问题 - 基于springboot--mybatis

    在Spring Boot和MyBatis中,我们有时需要在方法中同时使用两个不同的数据库,但使用 @Transactional 注解会变得复杂。这时我们可以用一种更灵活的方法来处理。 想象一下这样的场景:我们有两个数据库,我们希望在一个方法中同时操作它们,但是普通的 @Transactional 注解变得不太

    2024年02月01日
    浏览(11)
  • DataEase开源BI工具安装_数据全量_增量同步_大屏拖拽自动生成_多数据源支持_数据血缘分析---大数据工作笔记0183

    DataEase开源BI工具安装_数据全量_增量同步_大屏拖拽自动生成_多数据源支持_数据血缘分析---大数据工作笔记0183

    我这里用的是Centos7.9安装的 可以通过uname -p来查看一下我们的电脑架构,可以看到是x86_64架构的  我们下第一个,这个是x86架构的,第二个arm架构的    然后解压到/opt/module中   然后再去重命名一下文件夹.  推荐200G  本地模式的功能比较多 推荐100G  

    2024年02月15日
    浏览(10)
  • SpringBoot @DS注解实现多数据源配置及问题解决

    SpringBoot @DS注解实现多数据源配置及问题解决

    进过验证,@DS注解加到mapper接口、service接口、service方法里都不生效,获取的还是默认的主数据源。猜测是由于spring的aop切面机制导致拦截不到@DS注解,进而不能切换数据源,正确的做法是添加到service实现类或者实现类里具体的方法上。 在事务方法内调用@DS注解的方法,@D

    2023年04月25日
    浏览(12)
  • Spring Boot多数据源配置详解及报错问题解决

    Spring Boot多数据源配置详解及报错问题解决

    Spring Boot多数据源配置详解 前几天,公司提了个需求,对一个项目进行二次开发,在开发过程中,需要配置多数据源来进行数据库的操作。下面我将主键探索总结的配置流程和遇到的各种坑做以总结,希望能够帮到遇到同样问题的友友。有错的地方,请各位大佬留言指出。

    2024年02月16日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包