首页 > java > spring事物不回滚

spring事物不回滚

2013年2月1日 亲亲宝宝 发表评论 阅读评论

java环境中的事物采用spring的xml配置,在service中如果抛出Exception异常,则事物不能回滚。

原来默认spring只在发生未被捕获的runtimeexcetpion时才回滚。spring的事务边界是在调用业务方法之前开始的,业务方法执行完毕之后来执行commit or rollback(Spring默认取决于是否抛出runtime异常,但是可以修改,见解决方法2). 如果抛出runtime exception的话,事务会回滚。 一般不需要在业务方法中catch异常,如果非要catch,在做完你想做的工作后(比如关闭文件等)一定要抛出runtime exception,否则spring会将你的操作commit,这样就会产生脏数据.

解决办法有两种:

1、  service中不抛出Exception,使用try捕获后抛出runtimeexcetpion;

2、  修改spring的配置文件

       <tx:method name=”save*” rollback-for=”java.lang.Exception”/>

3、  在try捕获后执行

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常. 在service中增加数据库回滚,不推荐使用。

分类: java 标签: 4,828 次阅读
原文链接:http://www.wenhq.com/article/view_734.html
欢迎转载,请注明出处:亲亲宝宝
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.