SpringMVC 中Transactional注解的巨坑

在处理数据库事务时,遇到一个挑战:业务A需要操作1和操作2,操作1失败则整体回滚,操作2失败只回滚操作2。通过在Manager层和Service层使用@Transactional注解进行事务管理,但发现位置不当导致事务行为不符合预期。问题源于Spring MVC中同一类内的@Transactional被视为单一事务。通过论坛了解到是AOP相关问题,并调整代码结构后,事务处理恢复正常。
摘要由CSDN通过智能技术生成

最近的一个项目中对数据库事务的处理要求比较严格。比如要完成业务A,需要完成操作1和操作2, 如果操作1失败,则业务A要整体回滚;如果操作2失败, 则仅需回滚操作2的数据,操作1的数据要留下来。因此整个业务算是两个事务。

发现的问题

以前并没有认真整理过代码的结构,这次要实现上述要求在事务标签的放置位置上遇到了一个奇怪的问题。业务我放在一个Manager中处理,操作可能放在Service层,或者有些也放在Manager中,结果如上的业务A,我的代码结构经历了如下几种调整:

位置1

如下代码进能保存op1()的数据,op2()数据无法保存。

public class Manager{
   


    public void bus1(args) throws Exception {
        op1();
        op2();
    }

    @Transactional
    public v
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值