V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kikione
V2EX  ›  Java

spring 事务问题

  •  1
     
  •   kikione · 2021-11-05 16:48:28 +08:00 · 2842 次点击
    这是一个创建于 1114 天前的主题,其中的信息可能已经有所发展或是发生改变。

    两个 Service A 的方法 A 没有加 @Transactional 和 Service B ;

    Service A 的方法 A 没有加 @Transactional

    Service B 的方法 B 添加 @Transactional

    方法 A 调用方法 B ,方法 B 出错,抛出全局异常,

    为什么会去回滚到 controller 里,再执行一次。

    相当于 B 抛出全局异常后, 这个接口执行了两遍

    第 1 条附言  ·  2021-11-05 17:32:14 +08:00
    两个 Service A 和 Service B ;

    第一句
    17 条回复    2021-11-15 14:09:59 +08:00
    Hurriance
        1
    Hurriance  
       2021-11-05 16:52:39 +08:00
    回滚到 controller ? debug 的过程是怎样的
    kikione
        2
    kikione  
    OP
       2021-11-05 17:01:58 +08:00
    @Hurriance debug 就是 抛出异常后,又从 controller 执行一遍,我把 @Transactional 放在方法 A ,就不会重复执行了,直接返回异常
    kikione
        3
    kikione  
    OP
       2021-11-05 17:06:16 +08:00
    @Hurriance 不太清楚什么原理
    Hurriance
        4
    Hurriance  
       2021-11-05 17:06:33 +08:00
    可以的话,贴个代码吧
    thetbw
        5
    thetbw  
       2021-11-05 17:10:37 +08:00
    应该是代码写的问题的,看看是不是接口哪里掉了两次,事务仅仅是数据库层面的回滚吧
    nonoyang
        6
    nonoyang  
       2021-11-05 17:29:02 +08:00 via iPhone   ❤️ 5
    刚下班,我他妈连第一句都看不懂……
    ZeawinL
        7
    ZeawinL  
       2021-11-05 17:30:36 +08:00
    没下班, 第一句我也看不懂......
    kikione
        8
    kikione  
    OP
       2021-11-05 17:30:38 +08:00
    @nonoyang 第一句写错了 我的
    clf
        9
    clf  
       2021-11-05 17:37:18 +08:00
    你怎么判断 Controller 接口执行了两次的?

    另外建议贴代码。
    siweipancc
        10
    siweipancc  
       2021-11-05 18:14:46 +08:00 via iPhone
    控制层打印一下当前线程 id
    NutChocHoney
        11
    NutChocHoney  
       2021-11-05 18:14:50 +08:00
    断点放掉的一瞬间又有人走这个方法了吧
    yqsas
        12
    yqsas  
       2021-11-05 22:06:28 +08:00 via iPad
    猜测 serviceA 那边开启了调用异常,自动重试功能
    cp19890714
        13
    cp19890714  
       2021-11-06 01:16:53 +08:00
    你提出了两个问题。
    1. 事务回滚到了 controller ,也就是说 A 中的数据也回滚了。
    2. controller 执行了两次

    回答:
    1. 请说明你的证据
    2. 最大可能就是异常触发重试
    LeeSeoung
        14
    LeeSeoung  
       2021-11-06 11:28:20 +08:00
    大概率是用的框架做了重试。。
    leatomic
        15
    leatomic  
       2021-11-07 11:45:13 +08:00
    只能说 talk is cheap 了
    tedzhou1221
        16
    tedzhou1221  
       2021-11-08 08:56:39 +08:00
    你可以 debug 一下,看看整个调用栈的过程
    notwaste
        17
    notwaste  
       2021-11-15 14:09:59 +08:00
    盲猜用了 spring retry
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2439 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 15:55 · PVG 23:55 · LAX 07:55 · JFK 10:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.