若依RuoYi-Vue分离版—配置多数据源

若依RuoYi-Vue分离版—配置多数据源

  • 一、修改application-druid.yml
  • 二、修改pom文件,引入依赖
    • 第一种:下载jar包到本地,然后引入(我这边用的是这种)
      • 本地引入的,打包时需要加上配置
    • 第二种:从远程maven仓库引入
  • 三、修改多数据源配置类,新增从数据库配置
    • 3.1 修改 多数据源枚举
    • 3.2 修改 多数据源配置类
  • 如何切换使用

记录一下使用若依框架配置多数据库时踩到的坑,主数据库是mysql,从数据库是dm

一、修改application-druid.yml

在这里插入图片描述

# 数据源配置
spring:datasource:type: com.alibaba.druid.pool.DruidDataSource# 多数据源需要注释下面这行配置 这行配置表示直接指定mysql的驱动#driverClassName: com.mysql.cj.jdbc.Driverdruid:# 主库数据源master:url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8username: rootpassword: rootdriverClassName: com.mysql.cj.jdbc.Driver# 从库数据源slave:# 从数据源开关/默认关闭enabled: falseurl: username: password:dmsource:# 从数据源开关/默认关闭enabled: trueurl: jdbc:dm://192.100.198.19:5236username: DBDWSpassword: SYSDBA001driverClassName: dm.jdbc.driver.DmDriver# 初始连接数initialSize: 5# 最小连接池数量minIdle: 10# 最大连接池数量maxActive: 20# 配置获取连接等待超时的时间maxWait: 60000# 配置连接超时时间connectTimeout: 30000# 配置网络超时时间socketTimeout: 60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒timeBetweenEvictionRunsMillis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒minEvictableIdleTimeMillis: 300000# 配置一个连接在池中最大生存的时间,单位是毫秒maxEvictableIdleTimeMillis: 900000# 配置检测连接是否有效validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsewebStatFilter: enabled: truestatViewServlet:enabled: true# 设置白名单,不填则允许所有访问allow:url-pattern: /druid/*# 控制台管理用户名和密码login-username: ruoyilogin-password: 123456filter:stat:enabled: true# 慢SQL记录log-slow-sql: trueslow-sql-millis: 1000merge-sql: truewall:config:multi-statement-allow: true

二、修改pom文件,引入依赖

在这里插入图片描述

引入数据库驱动包有两种方式

第一种:下载jar包到本地,然后引入(我这边用的是这种)

对于关系为
DmJdbcDriver16 => Jdk1.6,
DmJdbcDriver17 => Jdk1.7,
DmJdbcDriver18 => Jdk1.8。

在这里插入图片描述

<!-- 达梦数据库驱动 project.basedir表示项目根路径-->
<dependency><groupId>com.dm</groupId><artifactId>DmJdbcDriver18</artifactId><version>1.8</version><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/DmJdbcDriver18.jar</systemPath>
</dependency>

${project.basedir} 是一个 Maven 属性,它会被解析为项目的根目录的绝对路径。这通常用于在 Maven 插件配置中引用文件或目录。

本地引入的,打包时需要加上配置

在根目录下 pom.xml 文件中,添加:
在这里插入图片描述

<!-- 打包外部jar -->
<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!--设置为true,以便把本地的system的jar也包括进来--><includeSystemScope>true</includeSystemScope></configuration>
</plugin>

第二种:从远程maven仓库引入

    <!--https://mvnrepository.com/artifact/com.dameng/DmJdbcDriver18 --><dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.2.192</version></dependency>

三、修改多数据源配置类,新增从数据库配置

3.1 修改 多数据源枚举

在这里插入图片描述

package com.ruoyi.common.enums;/*** 数据源* * @author ruoyi*/
public enum DataSourceType
{/*** 主库*/MASTER,/*** 从库*/SLAVE,/***达梦库*/DMSOURCE
}

3.2 修改 多数据源配置类

在这里插入图片描述

@Bean@ConfigurationProperties("spring.datasource.druid.dmsource")@ConditionalOnProperty(prefix = "spring.datasource.druid.dmsource", name = "enabled", havingValue = "true")public DataSource dmsourceDataSource(DruidProperties druidProperties){DruidDataSource dataSource = DruidDataSourceBuilder.create().build();return druidProperties.dataSource(dataSource);}@Bean(name = "dynamicDataSource")@Primarypublic 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.DMSOURCE.name(), "dmsourceDataSource");//从以下可看出第一个参数为指定默认数据源(此处为:master),第二个参数为多数据源return new DynamicDataSource(masterDataSource, targetDataSources);}

如何切换使用

使用多数据源
service方法 或 service类
mapper方法 或 mapper类上 或 mapper接口上
添加@DataSource注解,其中value用来表示数据源。
只需要在其中一处加即可,只给mapper或者只给service加

例如:
在这里插入图片描述

参考文章
【1】若依框架 spring boot+ mybatis + 多数据库配置(mysql+oracle)
【2】若依@v3.8.6前后端分离版集成达梦数据库(DM8)
【3】通过<scope>system</scope>依赖本地jar包时,要注意了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/29740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

随想录Day63 | 单调栈 42. 接雨水 84.柱状图中最大的矩形

随想录Day63 | 单调栈 42. 接雨水 84.柱状图中最大的矩形 42. 接雨水 题目链接 42 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 第一次提交 class Solution { public:int trap(vector<int>…

模板类的实例—栈

#include<iostream>using namespace std;typedef int Datatype;class Stack { private:Datatype* items;//栈数组int stacksize;//栈的实际大小int top;//栈顶指针 public://构造函数&#xff1a;1&#xff09;分配栈数组内存&#xff0c;2&#xff09;把栈顶指针初始化为…

云原生微服务开发日趋成熟:有效拥抱左移以改善交付

在软件工程和应用程序开发方面&#xff0c;云原生已经成为许多团队的常用术语。当人们调查云原生的世界时&#xff0c;他们经常会得出这样的观点&#xff1a;云原生的整个过程都是针对大型企业应用程序的。几年前&#xff0c;情况可能确实如此&#xff0c;但随着 Kubernetes 等…

解码 ResNet:残差块如何增强深度学习性能【数学推导】

ResNet简介 残差网络结构 残差网络&#xff08;ResNet&#xff09;是由何凯明等人在2015年提出的&#xff0c;它极大地提高了深度神经网络的训练效果&#xff0c;尤其是非常深的网络。ResNet的核心思想是引入“残差块”&#xff08;Residual Block&#xff09;&#xff0c;通…

《Fundamentals of Power Electronics》——理想变压器基本公式推导

接下去推导理想变压器的基本公式。理想变压器满足以下三个条件&#xff1a; 1、无铜损。假设原副边线圈均无纯电阻&#xff0c;则不会因在铜导线中产生焦耳热引起能量损耗&#xff0c;另外也不考虑回路中的分布电容。 2、无铁损。忽略通过铁芯的磁通量变化引起的涡流损耗&…

线性二次型调节器(LQR)举例

线性二次型调节器(LQR) 线性二次型调节器(LQR)是一种用于最优控制的问题,其中目标是通过最小化某个代价函数来找到最优控制策略。LQR特别适用于线性系统。为了在人形机器人上应用LQR进行建模,主要步骤包括建立系统模型、定义代价函数以及求解最优控制律。以下是详细步骤…

Chromium 开发指南2024 Mac篇-Xcode安装(二)

1.引言 在开始编译和开发 Chromium 之前&#xff0c;确保开发环境的正确配置是至关重要的。对于 Mac 用户来说&#xff0c;Xcode 是不可或缺的工具&#xff0c;因为它不仅提供了必需的编译器和工具链&#xff0c;还包含了与 macOS 系统深度整合的开发资源。在本系列指南的第一…

redis从入门到进阶——数据类型、 操作、数值操作、发布订阅、消息队列、布隆过滤器、事务

文章目录 基础数据类型操作数值操作 进阶发布订阅消息队列布隆过滤器事务 基础 数据类型 string&#xff0c;set, hash, list, zset 操作 string符串类型&#xff1a; 保存一个字符串&#xff1a;set key value [EX seconds|PX milliseconds...] [NX|XX]EX&#xff1a;设置…

Apache Druid-时序数据库

Apache Druid&#xff1a;是是一个集时间序列数据库、数据仓库和全文检索系统特点于一体的分析性数据平台&#xff0c;旨在对大型数据集进行快速的查询分析&#xff08;"OLAP"查询)。Druid最常被当做数据库来用以支持实时摄取、高性能查询和高稳定运行的应用场景&…

PHP框架详解:Symfony框架讲解

PHP作为一种流行的服务器端编程语言&#xff0c;拥有众多框架&#xff0c;其中Symfony是备受开发者推崇的一个强大框架。本文将详细讲解Symfony框架的特点、优势及其主要组件和用法。 一、Symfony简介 Symfony是由Fabien Potencier于2005年创建的一个开源PHP框架。它基于MVC&…

微信商城源码带分销功能 支持微信小程序+公众号端 含详细图文搭建教程

分享一款微商城源码系统&#xff0c;不仅支持微信公众号端和小程序端二合一管理&#xff0c;带分销机制&#xff0c;集合了市面上电商系统的功能&#xff0c;并增加了多项全新特色功能&#xff0c;如多商户商家入驻、区域代理、收银台、互动直播等&#xff0c;为商家提供了全方…

充电学习—2、开关电源基本原理

一、基本原理&#xff1a; 1、脉冲宽度调制&#xff08;锯齿波发生器 PWM&#xff09;&#xff1a;通过脉冲宽度的改变&#xff0c;实现占空比的调节&#xff0c;实现稳压 特点&#xff1a; 开关周期固定&#xff0c;滤波电路设计简单&#xff0c;开关频率具有固定性&#xff…

多行文本的文字展示全部和收起功能

组件代码&#xff1a; <template><!-- 外层容器&#xff0c;使用相对定位 --><div class"relative"><!-- 文本容器&#xff0c;根据 expanded 状态决定是否应用 line-clamp-4 类 --><div :class"{ line-clamp-4: !expanded }"…

表达式的格式化

表达式&#xff1a;一条具有明确结果的代码语句 在字符串前面加上前缀f&#xff0c;表示这是一个格式化字符串&#xff0c;可以在字符串中直接引用变量&#xff0c;并使用{}来表示这些变量的位置。例如&#xff1a; name "Alice" age 30 print(f"My name is …

scratch3编程02-使用克隆来编写小游戏

目录 1&#xff0c;游戏效果 2&#xff0c;游戏代码块 1&#xff09;玩家 2&#xff09;障碍物 ​ 3&#xff09;箭头 ​ 4&#xff09;关卡图片 3&#xff0c;scratch文件 1&#xff0c;游戏效果 使用克隆 在这个游戏中&#xff1a; 程序开始&#xff1a;只要点击“…

构建LangChain应用程序的示例代码:37、基于LangGraph的文档检索与答案生成系统教程

这示例它实现了一个基于LangGraph的系统&#xff0c;用于处理文档检索和生成答案的过程。 好的&#xff0c;我会按照Markdown格式完整翻译并保留文件结构和格式&#xff1a; ! pip install langchain_community tiktoken langchain-openai langchainhub chromadb langchain lan…

怎么做到源代码防泄密?9种方法教会你

源代码加密是一种安全措施&#xff0c;其目的是为了保护软件的源代码不被未授权的个人或实体访问或泄露。源代码是软件应用程序的基础&#xff0c;它包含了程序的逻辑结构、核心算法以及设计理念。由于源代码承载了软件的核心知识和创新&#xff0c;因此它具有极高的商业价值和…

Geoserver使用OGC过滤器PropertyIsLike无法读取PostGIS Jsonb类型

错误提示&#xff1a; code"internalEror"Rendering process falled, Layers: boylat shp_ 1 org,postgresq!.ut.PsQLException: ERRoR: function upperjisonb) does not existHint: No function matches the given name and arqument types, You might need to add …

Multisim仿真之万用表、安捷伦万用表、信号发生器操作方法

1、XMM是安捷伦示波器 如下图所示&#xff0c;实物安捷伦的外围3个插孔对应于 XMM图标示波器的右侧3个引脚&#xff0c;上下一一对应 2、函数信号发生器XFG 如下图所示&#xff0c;COM就是GND&#xff0c;正负的意思就是相对于GND而言&#xff0c;有正负电压&#xff1b; 3、…

由于bug造成truncate table卡住问题

客户反应truncate table卡主&#xff0c;检查awr发现多个truncate在awr报告期内一直没执行完&#xff0c;如下&#xff1a; 检查ash&#xff0c;truncate table表的等待事件都是“enq: RO - fast object reuse”和“local write wait” 查找“enq: RO - fast object reuse”&am…