首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Spring事务托管的有关问题

2012-10-21 
Spring事务托管的问题关于spring的事务管理的:!--事务通知--tx:advice idtxAdvice transaction-mana

Spring事务托管的问题

关于spring的事务管理的:

<!--事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager"> ?
?? ?<tx:attributes> ?
?? ??? ?<tx:method name="get*" read-only="true" /> ?
?? ??? ?<tx:method name="add*" propagation="REQUIRED" />
?? ??? ?<tx:method name="delete*" propagation="REQUIRED" />
?? ??? ?<tx:method name="update*" propagation="REQUIRED"/>
?? ?</tx:attributes> ?
</tx:advice>
?
<aop:config proxy-target-expression="execution(* com.mtea.mis.service.*Service.*(..))" />
?? ?<!-- 通知器引用通知,切入点 -->
?? ?<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" /> ?
</aop:config>

一般我们都会在业务逻辑层的指定方法进行事务环绕,若检测到有RuntimeException异常的抛出则事务回滚.
但是我有个疑问,一般业务逻辑层的操作出错了,我们都要记录一下日志,若记录的话,肯定是在catch块中是吧,但是
我如果catch住了exception的话,那么RuntimeException就不能再在业务逻辑层的方法往外抛了,若不往外抛的话,事务又回滚不了
这个问题不知道你是如何处理的啊 ?因此我想请教一下!!!

?? ?public void updateAnyWithTrans()
?? ?{
?? ??? ?try {
?? ??? ??? ?UserType oldUserType=userTypeMapper.findById(1);
?? ??? ??? ?oldUserType.setRemark("第6次remark");
?? ??? ??? ?userTypeMapper.update(oldUserType);
?? ??? ??? ?oldUserType.setRemark("第7次remark");
?? ??? ??? ?userTypeMapper.update(oldUserType);
?? ??? ??? ?throw new RuntimeException("测试异常");
?? ??? ?} catch (Exception e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ??? ?System.err.println("出错了");
?? ??? ?}
?? ?}

热点排行