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

posted on 2018-07-17 20:01  zhaoqiang1980  阅读(237)  评论(0编辑  收藏  举报