Spring事务控制和回滚
Posted zhaoqiang1980
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring事务控制和回滚相关的知识,希望对你有一定的参考价值。
1在一个项目中ssh结构,spring2.5,事务控制采用的是tx拦截器的方式。
自己写了个 int a=1/0;异常抛出了,但是事务还是提交了,怎么搞都不行。
现将看到的一些事务控制总结下来:
事务控制默认回滚RuntimeException(数组越界,结果为0等),并且是notchecked异常。
注意:sql内部出现异常默认不会回滚
如果在Service中有 try ..catch的形式,则无法抛出异常,不会回滚。因此需要在catch中throw new runtimeException在方法上加上主动抛出。
在tx部分要注意可以设置 <tx:method roback-for=\'Exception\',捕获自己指定的异常。如果使用声明式注解则为@Transactional(robackFor=Exception.class)
如果以上的方式还不行,就只能在Service的catch中使用以下的手动抛出。
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
参考文章:
(Spring transaction事务 roll back各种回滚)https://www.cnblogs.com/wangchuanfu/p/8110159.html
(Spring事务之使用tx标签配置拦截器)http://blog.sina.com.cn/s/blog_486c3b620100xuh7.html
(Spring2.5事务配置的5种方法)https://www.cnblogs.com/gaoyoubo/articles/1861464.html
(Spring 事务属性分析)https://www.cnblogs.com/aliger/p/3898869.html
(Spring声明式事务不回滚问题)http://www.jianshu.com/p/f5fc14bde8a0
(spring事务没回滚)https://www.cnblogs.com/lidelin/p/7266280.html
以上是关于Spring事务控制和回滚的主要内容,如果未能解决你的问题,请参考以下文章
阶段3 2.Spring_10.Spring中事务控制_4 spring中事务控制的一组API