在若依单体应用中,已经存在主从数据库,其实这也是一种变相的多数据源,如因需求需要扩展其他的数据源时,我们只需要专注修改个别文件即可。如下,会展示扩展数据源时需要修改那些文件,以及切换数据源的原理。
文章目录
一、配置修改
- 在合适的模块引入依赖
<!-- 阿里数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.16</version>
</dependency>
<!-- 动态数据源 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.1</version>
</dependency>
<!-- Mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Oracle驱动包 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
</dependency>
<!-- 对应其他数据库驱动包.... -->
- 修改项目配置文件
【记得正确更改时区】
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 主库数据源
master:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/xx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Seoul
username: username
password: password
validation-query: SELECT 1
# 从数据源1
slave1:
enabled: true
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/xx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Seoul
username: root
password: 123456
validation-query: SELECT 1
# sqlServer数据源
sqlServer:
enabled: true
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://127.0.0.1;databaseName=xx;trustServerCertificate=true
username: sa
password: 123456
validation-query: SELECT 1
# oracle数据源
oracle:
enabled: true
driverClassName: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@//127.0.0.1:1521/orcl?timezone=Asia/Seoul&sessionTimeZone=DBTIMEZONE
username: username
password: password
validation-query: SELECT 1 FROM DUAL
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置连接超时时间
# connectTimeout: 30000
connectTimeout: 2147483
# 配置网络超时时间
# socketTimeout: 60000
socketTimeout: 2147483
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1
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
- 修改枚举类
/**
* 数据源
*
*/
public enum DataSourceType
{
/**
* 主库
*/
MASTER,
/**
* 从数据源1
*/
SLAVE1,
/**
* sqlServer数据源
*/
SQLSERVER,
/**
* oracle数据源
*/
ORACLE,
}
- 修改druid多数据源配置文件
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.FilterChain