广告
返回顶部
首页 > 资讯 > 后端开发 > Python >@Transactional遇到trycatch失效的问题
  • 482
分享到

@Transactional遇到trycatch失效的问题

2024-04-02 19:04:59 482人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录@Transactional遇到try catch失效@Transactional与try..catch同时使用的经验@Transactional遇到try catch失效 Sp

@Transactional遇到try catch失效

SpringBoot中@Transactional遇到了try catch失效了,需要手动回滚

try {
                        user.setExpire(Integer.parseInt(expire));
                        userService.updateById(user);
                        Host host = hostService.getById(user.getHostId());//查询数据库的host信息
                        updateResponse = proxmoxConfig.updateEffectiveTime(user.getUserName(), expire, host.getHostUrlRequest());
                    } catch (Exception e) {
                        e.printStackTrace();
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    }

@Transactional与try..catch同时使用的经验

@transactional 是我们在java 开发中经常用到的注解,帮助我们非常方便快捷的完成事务管理,尤其在批量处理数据的时候,更是重要,最近业务中遇到了这种情况,

批量向数据库导入数据,这就会出现excel表中有的数据类型符合导入要求,有的不符合,当我们导入的时候要么就全部成功的导入,要么就失败都不导入,如果不用事务的话就会出现数据正确的会导入到数据库,不正确的就没导入,造成数据的不一致性,

可我的业务不仅仅是用@transactional 注解完成事务,而且当出现数据不符抛异常的时候还要返回错误的提示,所以我还得结核try...catch 块,问题来了,用try...catch就是捕获异常,然后处理掉,而 @transactional 是要在系统抛异常的时候才能起到事务回滚的作用,

后来我查了一些资料,如下操作:

重点就是TransactionAspectSupport.currentTransactionStatus().setRollbackOnly 这个方法,它会起到异常回滚的作用,这样我就可以在它执行完之后,设置需要返回的自定义的信息

最近又遇到了@transactional 注解不起作用的问题了,这一次的情况是原来我的Mysql 数据库默认用的是MyISAM 引擎,而这个存储引擎不支持事务,所以需要对数据库的进行一下操作:在控制台输入  alter table xxx(表名) engine=InnoDB 然后你可以在输入show create table xxx(表名) 来查看是否修改成功

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: @Transactional遇到trycatch失效的问题

本文链接: https://www.lsjlt.com/news/163768.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作