springboot 动态多类型数据源连接池管理 springboot动态配置多数据源
转载
首先导入下方依赖开启多数据源配置
<!-- 动态数据源 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.4</version>
</dependency>
PS: 连接mysql需要导入mysql依赖
PS: 连接sqlserver需要导入sqlserver依赖
PS: 连接oracle需要导入oracle依赖
(下边供上三个的依赖)
<!-- mysql依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<!-- sqlserver依赖-->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
<scope>runtime</scope>
</dependency>
<!-- oracle依赖 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>10.2.0.1.0</version>
</dependency>
想要连上数据库光有上边的可不行,还得有数据库连接池依赖
<!-- druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.18</version>
</dependency>
yml里的多数据源配置
spring:
servlet:
multipart:
enabled: true #是否启用http上传处理
max-request-size: 100MB #最大请求文件的大小
max-file-size: 100MB #设置单个文件最大长度
file-size-threshold: 20MB #当文件达到多少时进行磁盘写入
datasource:
druid:
stat-view-servlet:
enabled: true
loginUsername: admin
loginPassword: 123456
allow:
web-stat-filter:
enabled: true
dynamic:
druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)
# 连接池的配置信息
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
#validationQuery: SELECT 1
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
datasource:
master: #可以理解为数据源名称
url: jdbc:mysql://ip:端口/数据库?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: 账号
password: 密码
driver-class-name: com.mysql.jdbc.Driver
# 多数据源配置 sqlServer
sqlserver:
url: jdbc:sqlserver://ip:端口;SelectMethod=cursor;DatabaseName=数据库
username: 账号
password: 密码
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# 多数据源配置
oracle:
url: jdbc:oracle:thin:@IP:端口:数据库
username: 账号
password: 密码
driver-class-name: oracle.jdbc.driver.OracleDriver
validationQuery: SELECT 1 FROM DUAL
下边将介绍如何使用
其实就是一个核心的注解 @DS
PS: 这个注解是最上边动态数据源依赖提供的注解
package com.baomidou.dynamic.datasource.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DS {
String value();
}
通过他的源码可以看出来 他能作用到方法 接口 和 类上
用法 @DS("数据源名称")
作用到方法上代表该方法所操作的数据源是指定数据源(例子如下)
@DS("sqlserver")
List<PoRdrecordVO> getU8One(@Param("id") String id);
//那么我这个mapper操作的数据源就是@DS()内的指定数据源 mapper层对应的xml内不需要指定数据源
作用到类和接口上则表示类和接口内的所有方法操作的数据源都为该数据源
PS: 类和方法上的注解加载顺讯为类和接口-->方法 也就是说 当方法和类上都有注解的时候 以方法上的为准
PS: 不写的时候默认使用master数据源
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。