java-springboot项目中使用@Transactional,try---catch之后事务未回滚问题及解决办法

try—catch之后使用@Transactional注解事务未回滚问题及解决办法

出现问题如下图所示:
1.项目的server层实现如图,在接口的实现类中使用了@transactional注解java-springboot项目中使用@Transactional,try---catch之后事务未回滚问题及解决办法_第1张图片
2.方法personINSERT中涉及到DML操作需要用到事务java-springboot项目中使用@Transactional,try---catch之后事务未回滚问题及解决办法_第2张图片
3.personINSERT方法1,2处有两处插入操作,其中1处执行成功,2处执行失败时,未进行回滚操作java-springboot项目中使用@Transactional,try---catch之后事务未回滚问题及解决办法_第3张图片
导致结果:1处执行成功,对应表中写入一条数据 2处执行失败 抛出一个sql异常,表中没有写入数据, 事务没有生效,即@Transactional注解未起作用

解决方案:
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
通过编程式的方式手动回滚 如图所示:
java-springboot项目中使用@Transactional,try---catch之后事务未回滚问题及解决办法_第4张图片
原因:
代码中我对可能出现的异常进行了 try{}catch{}处理 导致 @Transactional注解未起作用

参考其他资料及个人总结:
当Transaction内发生unchecked exception的时候,会自动rollback,但是当Transaction内发生checked exception时,是不会自动rollback的。

Exception是异常分为运行时异常RuntimeException和非运行时异常

可查的异常(checked exceptions):Exception下除了RuntimeException外的异常

非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。如IOException等以及用户自定义的Exception异常。

你可能感兴趣的:(java)