关于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-class="true">
<aop:pointcut id="serviceMethod" 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("出错了");
}
}
Spring事务托管的问题
最新推荐文章于 2022-09-28 17:12:09 发布