若依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.Driver
druid:
# 主库数据源
master:
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
driverClassName: com.mysql.cj.jdbc.Driver
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: false
url:
username:
password:
dmsource:
# 从数据源开关/默认关闭
enabled: true
url: jdbc:dm://192.100.198.19:5236
username: DBDWS
password: SYSDBA001
driverClassName: 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 DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: ruoyi
login-password: 123456
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
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")
@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.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包时,要注意了!