如何解决@Transactional遇到try catch失效的问题(@transactional,catch,try,开发技术)

时间:2024-05-08 05:42:20 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

@Transactional遇到try catch失效

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

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

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

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

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

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

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

如何解决@Transactional遇到try catch失效的问题

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

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

如何解决@Transactional遇到try catch失效的问题

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:如何解决@Transactional遇到try catch失效的问题的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:C语言的线性表之顺序表怎么用下一篇:

5 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18