开头敬前人
文章参考内容:
SpringBoot 2.X 整合 druid + dynamic-datasource 多数据源方案
SpringBoot - 整合并操作Oracle数据库教程(手动添加ojdbc驱动)
场景: 现有的成熟Mysql项目要加入Oracl数据的查询,为了尽量不影响当前项目的前提下,采用了添加数据连接池的方案。
一、pom.xml配置添加
<!-- Mysql 连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- oracle 连接 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency>
<!-- 添加字符集 orai18n.jar 的依赖-->
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>orai18n</artifactId>
<version>19.3.0.0</version>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
其中 orai18n 是因为有一个报错 java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK 后自己查资料加入的。
数据池的配置添加到 yml 文件
# Spring
spring:
autoconfigure:
# 排除 Druid 自动配置
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
datasource:
# 指定使用 Druid 数据源
type: com.alibaba.druid.pool.DruidDataSource
# 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
dynamic:
# 设置默认的数据源或者数据源组,默认值即为 master
primary: master
datasource:
# 主库数据源
master:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/database1?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
# 从库数据源
slave:
driverClassName: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@192.168.0.35:1521/thisTest
username: root
password: root
druid:
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
JDBC 连接 Oracle 也是第一次书写,前面一直写错了连接方式,导致调用的时候连不上。后来查到这篇文章详细介绍了关于URL的格式。
格式 1:
jdbc:oracle:thin:@<hostName>:<portNumber>:<sid>; (使用SID连接)
格式 2:
jdbc:oracle:thin:@//<hostName>:<portNumber>/<serviceName>; (用服务名连接,我这里用的就是服务名)
格式 3:
jdbc:oracle:thin:@<TNSName> (使用TNSName连接)
使用
在需要的 Mapper 上加上注解即可 slave 是次要数据库的连接池名
@DS("slave")
@Repository
public interface BookMapper{
/**
* 图书列表
* @return
*/
List<Book> selectBookList();
}