【springboot】配置Oracle多数据源切换

170 阅读1分钟

一、需求背景

公司项目因功能要求需要在一个接口中完成对两个Oracle数据库中数据的查看及操作,并且其中某些数据类型为CLOB类型的数据,而单使用DBlink无法完成对CLOB类型数据的查看修改,估决定使用动态切换数据源的方式来实现需求。

二、具体步骤

1、在pom文件中引入相应依赖
<!--        多数据源切换-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.0</version>
        </dependency>

<!--        数据库驱动-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.11</version>
        </dependency>
2、修改配置文件
spring:
  jta:
    enabled: true
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    dynamic:
      primary: master #默认数据库
      strict: false
      datasource:
        master: #主数据库配置
          driver-class-name: oracle.jdbc.OracleDriver
          username: master
          password: master
          url: jdbc:oracle:thin:@ip:port:sevice

        slave: #从数据库配置
          driver-class-name: oracle.jdbc.OracleDriver
          username: slave
          password: slave
          url: jdbc:oracle:thin:@ip:port:sevice
3、项目中使用

在需要进行数据切换的地方添加上@DS(value = "配置的数据库名"),该注解可放置在方法、类上。若未指明数据库则默认为默认数据库即master

三、存在问题

由于事务是基于数据库连接的,所以在切换数据库相当于原先的数据库连接就被关掉了,所以事务也就无法存在了,导致如果在一个有数据库切换操作的方法中添加事务控制,则会导致该事务报错导致系统无法启动。

有没有大佬给个这个问题的解决思路?