spring事务回滚的一些个人总结
2. 如果抛出runtime exception 并在你的业务方法中没有try-catch到的话,事务会回滚,所以一般不在业务层try-catch。
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>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。