记录SprintBoot 多数据源 Mysql + Oracle 方案

986 阅读2分钟

开头敬前人

文章参考内容:

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的格式。

格式 1jdbc:oracle:thin:@<hostName>:<portNumber>:<sid>;  (使用SID连接)

格式 2jdbc:oracle:thin:@//<hostName>:<portNumber>/<serviceName>; (用服务名连接,我这里用的就是服务名)

格式 3jdbc:oracle:thin:@<TNSName> (使用TNSName连接)

使用

在需要的 Mapper 上加上注解即可 slave 是次要数据库的连接池名

@DS("slave")
@Repository
public interface BookMapper{

    /**
     * 图书列表
     * @return
     */
    List<Book> selectBookList();
}