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

关于 springboot+mybatis 的事务管理问题

  •  
  •   jiobanma ·
    banmajio · 2020-09-15 10:28:07 +08:00 · 2052 次点击
    这是一个创建于 1536 天前的主题,其中的信息可能已经有所发展或是发生改变。

    对事务不熟悉一直没有用过,所以问题可能会比较 rz !! 如果我在一个 controller 中有一个方法,要去删除数据流程是:先调用关联表的 service 去删除关联变的数据, 然后再去调用主表的 service 删除主表的数据。这两个删除方法存在于不同的 service 接口中。这个时候我该如何做到在这个流程中如果某一个删除出现问题,让该流程中改变的数据进行回滚?(在不改变 service 结构的情况下)

    第 1 条附言  ·  2020-09-15 11:34:42 +08:00
    https://blog.csdn.net/weixin_43470118/article/details/103056373


    我使用上述链接中的方法试了一下 好像回滚了,不知道这种方式使用有没有问题,大佬们可以看一下帮我解答一下,谢谢!!!!
    10 条回复    2020-09-16 10:25:25 +08:00
    dovme
        1
    dovme  
       2020-09-15 10:54:54 +08:00
    方法上加 @Transactional 注解
    KevinBlandy
        2
    KevinBlandy  
       2020-09-15 11:02:09 +08:00
    互相调用的各个 Service 方法都添加 @Transactional 注解。
    colincat
        3
    colincat  
       2020-09-15 11:06:42 +08:00
    抽离出来一个单独 service 添加 @Transactional
    git00ll
        4
    git00ll  
       2020-09-15 11:07:15 +08:00
    两个 service 的方法上都加上事务注解,默认是 REQUIRED,调用的第二个 service 会共享第一个 service 的事务,即使用同一条 jdbc 连接。
    jiobanma
        5
    jiobanma  
    OP
       2020-09-15 11:22:07 +08:00
    @colincat #3 目前不能更改 service 的结构
    @KevinBlandy #2 不是互相调用,是同步调用两个 service
    colincat
        6
    colincat  
       2020-09-15 11:31:48 +08:00
    @jiobanma 单独提取出来一个 component,因为 spring 事务是基于代理实现的,了解一下底层更加有助于编码
    1107139144
        7
    1107139144  
       2020-09-15 17:20:28 +08:00
    把两个 service 里的方法整合在一个 service 。只 controller 里面调用一个 service
    jiobanma
        8
    jiobanma  
    OP
       2020-09-15 17:58:01 +08:00
    @1107139144 #7 这个 service 结构目前不能变动,不过按照附言里的方式手动回滚和提交事务已经实现了
    chen19
        9
    chen19  
       2020-09-16 09:27:30 +08:00
    两个 Service 方法都添加 @Transactional 注解,应该就可以了
    sdrzlyz
        10
    sdrzlyz  
       2020-09-16 10:25:25 +08:00
    serviceA 直接调用 serviceB 的话,两者不会在同一个事务里。

    如果是 spring 的话,serviceA 先 getBean(ServiceB),然后再调用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1921 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:22 · PVG 00:22 · LAX 08:22 · JFK 11:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.