yjy别看我的文章 2023-11-08 16:16 采纳率: 64.3%
浏览 1
已结题

Spring事物求解

我有两个服务,一个A服务,一个B服务,A方法添加了事物@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class),A方法逻辑里面先去修改A数据库中的A表,成功后通过feign去调用B服务中的方法修改B库的B表(B服务中的方法也开启了事物@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)),最后在执行A方法中剩下的不重要的逻辑。所以前端在请求A方法时,A方法中有三个逻辑:1、先去修改A表2、通过feign修改B表3、执行其他逻辑
现在有几个问题:
1、如果我在调用B服务执行B方法的时候报错了,那么A服务已经修改的A数据表会回滚吗?
2、如果我在修改A、B时都没报错,但是我在执行不重要的逻辑的时候报错了,那么修改的A、B的数据表都会回滚吗
如果不能保证两个服务同时回滚,那么我该怎么解决这个问题呢?用什么技术解决这个问题呢?

  • 写回答

2条回答 默认 最新

  • 七号公园的忧伤 Java领域新星创作者 2023-11-08 16:21
    关注

    事务不能跨服务。
    1、b执行报错,如果在A这边抛出了异常,a会回滚,如果A这边没有异常,异常在B服务,是不会回滚的。
    2、哪边报错哪边回滚。AB事务之间没有任何关系。
    解决方式:
    你这种需要解决的属于是 “分布式事务”。可以自己查查,很多文章。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月17日
  • 已采纳回答 11月9日
  • 创建了问题 11月8日

悬赏问题

  • ¥20 access中怎么分割分别获取一下图中的值
  • ¥15 类图中关联与聚合的区别
  • ¥15 ENVI高分五号去除云层的方法
  • ¥15 16进制数据如何得到奇偶校验位
  • ¥15 求合并两个字节流VB6代码
  • ¥15 Pyqt 如何正确的关掉Qthread,并且释放其中的锁?
  • ¥30 网站服务器通过node.js部署了一个项目!前端访问失败
  • ¥15 WPS访问权限不足怎么解决
  • ¥15 java幂等控制问题
  • ¥15 海湾GST-DJ-N500