Java开发日志-双数据库事务问题

这里在yaml配置了两个远程数据库

复制代码
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      # 主库数据源
      master:
        driverClassName: com.mysql.cj.jdbc.Driver
        url: xxxx
        username: DB1
      # 从库数据源
      slave:
        enabled: true
        driverClassName: com.mysql.cj.jdbc.Driver
        url: xx
        username: DB2

当我在Service业务类(关联的主数据库中的表)中需要调用从库的Service业务时,

类似于下边这种情况

java 复制代码
@Transactional
public class 主库Service{

    @Autowired
    private 从库Service 从库Service;

    public void xxx() {
       Long id = 从库Service.selectPurchasePriceListVOById(id);
    }
}

这里在调用从库Service函数想要获取ID时,会报错返回无法找到对应的数据表(从库开关正常打开状态)就是找不到对应的数据表。

临时解决方案:(从Controller层进行调用)如下

java 复制代码
public class xxController extends BaseController
{
    @Autowired
    private 从库Service 从库Service;

    @Autowired
    private 主库Service 主库Service;

    public viod xxx(){
        Long id = 从库Service.getId();
        主库Service.xxx(id);
    }
    
}

分析问题:因为主Service添加了事务,导致从库的Service无法进行切换从库,目前解决方案就是不在有事务的业务类中进行主从库切换。

相关推荐
卓怡学长10 分钟前
m280本科生导师指导平台
java·数据库·spring·tomcat·maven·intellij-idea
大尚来也11 分钟前
Serverless架构深度解析:适用场景、核心局限与破局之道
数据库
python猿11 分钟前
打卡Python王者归来--第30天
开发语言·python
qq_3349031512 分钟前
嵌入式C++驱动开发
开发语言·c++·算法
Wave84520 分钟前
非阻塞按键(单击,双击,长按)
数据库
阿贵---23 分钟前
C++代码规范化工具
开发语言·c++·算法
2401_8318249625 分钟前
为你的Python脚本添加图形界面(GUI)
jvm·数据库·python
久违的太阳27 分钟前
记录一次ORACLE RAC安装PSU补丁步骤
数据库·oracle
2401_8796938728 分钟前
用Pygame开发你的第一个小游戏
jvm·数据库·python
暮冬-  Gentle°31 分钟前
自定义内存检测工具
开发语言·c++·算法