一、需求背景
公司项目因功能要求需要在一个接口中完成对两个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
三、存在问题
由于事务是基于数据库连接的,所以在切换数据库相当于原先的数据库连接就被关掉了,所以事务也就无法存在了,导致如果在一个有数据库切换操作的方法中添加事务控制,则会导致该事务报错导致系统无法启动。
有没有大佬给个这个问题的解决思路?