这里在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无法进行切换从库,目前解决方案就是不在有事务的业务类中进行主从库切换。