坚炜小白日记 2023-09-04 15:50 采纳率: 91.7%
浏览 18

Spring事务下偶发性出现数据未更新

问题遇到的现象和发生背景

在Spring中添加事务,发现会偶发性出现数据未成功更新的情况,但在日志中显示成功执行了sql。按网上的解决方法来手动开启提交事务也会出现一样的问题。但将事务取消在执行就能成功更新。请问如何在保留事务的前提下,修改代码


  @Autowired
    PlatformTransactionManager platformTransactionManager;
    @Autowired
    TransactionDefinition transactionDefinition;
    @Override
//    @Transactional(rollbackFor = Exception.class)
    public HttpResult cooperationAdd(CooperationAdd add) {
//        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
//        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
        TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
        try {

//            List<Map<String, Object>> result = outCheckMapper.getFhpz(add.getPzh(), add.getSwh(), add.getCgddh(), add.getCgddhh());
////            if(result != null && result.size() != 0) {
////                list = result;
////            }
            for(CG cg:add.getCglist()){
                cooperationMapper.cgAdd(cg, add);
            }
            for(DE de:add.getDelist()){
                cooperationMapper.deAdd(de);
            }
            for(TM tm:add.getTmlist()){
                cooperationMapper.tmAdd(tm, add);
            }
            platformTransactionManager.commit(transactionStatus);
            return HttpResult.ok();
        }catch (Exception e){
            platformTransactionManager.rollback(transactionStatus);
            return HttpResult.error(e.getMessage());
        }
    }

运行结果及详细报错内容

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

使用注解和手动开启事务切换,但没效果

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-04 18:38
    关注

    【相关推荐】



    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/747179
    • 除此之外, 这篇博客: spring事务总结中的        1、事务的传播行为是解决开发中实际问题的,例如 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

                      service1 (业务层,调用dao1,dao2)

                                    xxx1()<---------------------------------------- xxx1Dao()持久层

                      aaa()

                                    xxx2()<-----------------------------------------xxx2Dao()持久层

                      service2(业务层,调用dao3,dao4)

                                    xxx3()<---------------------------------------- xxx3Dao()持久层

                     bbb()

                                    xxx4()<-----------------------------------------xxx4Dao()持久层

                      出现复杂的情况:

                                  同时调用service1.aaa() 和 service2.bbb()方法才能完成一个业务员;假如aaa()有事务,bbb()有事务,那么应该                              调用哪个事务呢?


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 修改了问题 9月4日
  • 修改了问题 9月4日
  • 修改了问题 9月4日
  • 创建了问题 9月4日

悬赏问题

  • ¥15 征集Python提取PDF文字属性的代码
  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?