spring事务回滚的一些个人总结

1.  spring的事务边界是在调用业务方法之前开始的,业务方法执行完毕之后来执行commit or rollback(取决于是否抛出runtime异常). 
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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值