标签:style blog color io 文件 数据 for 2014
1. spring的事务边界是在调用业务方法之前开始的,业务方法执行完毕之后来执行commit or rollback(取决于是否抛出runtime异常).3. 一般不需要在业务方法中catch异常,一般在调用该service的action中catch,然后将结果导到出错页面,如果非要try-catch,在做完你想做的工作后(比如关闭文件等)一定要抛出runtime exception(这就要求我们在自定义异常的时候,让自定义的异常继承自RuntimeException,这样抛出的时候才会被Spring默认的事务处理准确处理),否则spring会将你的操作commit,这样就会产生脏数据.导致try-catch代码是画蛇添足。
或者以add,create,update,delete,merge开头的方法均启动事务,出现Exception时回滚。以find,get,pagedSearch,search,query,count开头的方法均为只读方法,不启动事务其他方法支持事务,但不是必须。
模板配置:
<!-- 事务通知 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="save*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="create*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="merge*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="find*" propagation="SUPPORTS" read-only="true" /> <tx:method name="query*" propagation="SUPPORTS" read-only="true" /> <tx:method name="count*" propagation="SUPPORTS" read-only="true" /> <tx:method name="get*" propagation="SUPPORTS" read-only="true" /> <tx:method name="list*" propagation="SUPPORTS" read-only="true" /> <tx:method name="pagedSearch*" propagation="SUPPORTS" read-only="true" /> <tx:method name="search*" propagation="SUPPORTS" read-only="true" /> <tx:method name="*" propagation="SUPPORTS" rollback-for="Exception" /> </tx:attributes> </tx:advice>
spring事务回滚的一些个人总结,布布扣,bubuko.com
标签:style blog color io 文件 数据 for 2014
原文地址:http://blog.csdn.net/rotman173/article/details/38495361