V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
kikione
V2EX  ›  Java

spring 事务问题

  •  1
     
  •   kikione · Nov 5, 2021 · 3560 views
    This topic created in 1644 days ago, the information mentioned may be changed or developed.

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

    Service A 的方法 A 没有加 @Transactional

    Service B 的方法 B 添加 @Transactional

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

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

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

    Supplement 1  ·  Nov 5, 2021
    两个 Service A 和 Service B ;

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

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

    回答:
    1. 请说明你的证据
    2. 最大可能就是异常触发重试
    LeeSeoung
        14
    LeeSeoung  
       Nov 6, 2021
    大概率是用的框架做了重试。。
    leatomic
        15
    leatomic  
       Nov 7, 2021
    只能说 talk is cheap 了
    tedzhou1221
        16
    tedzhou1221  
       Nov 8, 2021
    你可以 debug 一下,看看整个调用栈的过程
    notwaste
        17
    notwaste  
       Nov 15, 2021
    盲猜用了 spring retry
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   919 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 20:38 · PVG 04:38 · LAX 13:38 · JFK 16:38
    ♥ Do have faith in what you're doing.