Springboot事务使用与回滚(摘抄别人)@Transactional

目前项目有一个缺陷(灵感来源聊聊业务系统中投递消息到mq的几种方式):
1.事务机制:审批同意,发送微信消息异常,是否会引起回滚?(估计不会,因为微信没抛异常,自己处理了,没往上抛,待测试

如果controller未开启事务,service中开始了事务,service成功执行,controller在之后的运行中出现异常(错误),不会自动回滚。
也就是说,只有在开启事务的方法中出现异常(默认只有非检测性异常才生效-RuntimeException )(错误-Error)才会自动回滚。
 如果想要对抛出的任何异常都进行自动回滚(而不是只针对RuntimeException),只需要在使用@Transactional(rollbackFor = Exception.class)即可。
开启事务的方法中事务回滚的情况:
①未发现的异常,程序运行过程中自动抛出RuntimeException或者其子类,程序终止,自动回滚。
②使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();进行手动回滚。
③注意:如果在try-catch语句中对可能出现的异常(RuntimeException)进行了处理,没有再手动throw异常,spring认为该方法成功执行,不会进行回滚,此时需要调用②中方法进行手动回滚
原文:
https://www.cnblogs.com/ZTPX/p/10566498.html

解决:mq解耦

你可能感兴趣的:(笔记)