@SpringBoot使用多数据源添加事务后多数据源不生效问题
SpringBoot使用多数据源添加事务后多数据源不生效问题
在网上找了好多解决方案,但是都好繁琐,我这个应该不是最佳解决方案,但应该是最简单的解决方案
一、
springboot项目
我的需求是: 将A库中未同步的数据 找出来 存到B库中,存储成功后 将A库中该条数据改为已同步
二、
我遇到的问题:因为有添加操作 所以需要加事务注解@Transactional,但是加上注解后多数据源就不生效,默认都走的主数据源也就是默认的数据源
三、
解决方法:将查询和添加分为两个方法,A方法查询,B方法添加,查询出来后调用B方法,重点就是调B方法的方式 ,事务注解要加在B方法上,也就是要加添加操作的方法上,详见代码
public void A() {
ApasinfoJYGLEntity sel = apasinfoJYGLMapper.selByPrimaryKey("1");
System.out.println(sel);
if(sel!=null){
// 这个调B方法的方式是重点,大概意思就是说将这个方法放在springBoot容器中管理
SpringContextUtil.getBean(ApasinfoJYGLServiceImpl.class).B(sel);
// B(sel);
}
}
// @Scheduled(fixedDelay = 600000)
@Transactional
public void B(ApasinfoJYGLEntity entity ) {
System.out.println("=============BB============");
ApasinfoEntity apasinfoEntity = new ApasinfoEntity();
apasinfoEntity.setProjid(entity.getProjid());
apasinfoEntity.setTongid(entity.getTongid());
apasinfoMapper.insertSelective(apasinfoEntity);
// 添加成功会修改状态
entity.setExtend2("0000000000");
apasinfoJYGLMapper.updateId(entity);
// 手动报异常,有异常就回滚
int i1 = 1/0;
}
希望以上对你有帮助,感谢ys提供的解决方案,如果没有
SpringContextUtil.getBean(***.class).B(sel);这个东西百度下看看怎么添加,获取spring上下文的工具
本文探讨了在SpringBoot项目中使用多数据源时,遇到事务管理导致数据源切换失效的问题。通过将查询和添加操作分开,将事务注解添加到添加操作的方法上,实现了简单有效的解决方案。
5732

被折叠的 条评论
为什么被折叠?



