博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring中配置了事务,数据业务层捕获异常,事务配置不成功?
阅读量:6640 次
发布时间:2019-06-25

本文共 1415 字,大约阅读时间需要 4 分钟。

这个问题我是解决了。原来我对spring的事务切如原理不是特别了解。

 

解决方案如下:

 

 

 

原理:spring aop  异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获runtimeexception的异常,但可以通过

<tx:method name="upd*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
配置来捕获特定的异常并回滚

换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚

 

解决方案:

方案1.例如service层处理事务,那么service中的方法中不做异常捕获,或者在catch语句中最后增加throw new RuntimeException()语句,以便让aop捕获异常再去回滚,并且在service上层(webservice客户端,view层action)要继续捕获这个异常并处理

方案2.在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常(现在项目的做法)

 

 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>

 <tx:advice id="txAdvice" transaction-manager="transactionManager">

  <tx:attributes>
   <tx:method name="add*" propagation="REQUIRED" />
   <tx:method name="upd*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
   <tx:method name="del*" propagation="REQUIRED" />
   <tx:method name="*" propagation="SUPPORTS" />
  </tx:attributes>
 </tx:advice>

 <aop:config>

  <aop:pointcut id="canyin" expression="execution(* com.laphone.base.baseservice.*.*(..)) ||execution(* com.laphone.canyin.*.service.*.*(..)) || execution(* com.laphone.canyin.*.*.service.*.*(..))"/>
  <aop:advisor advice-ref="txAdvice" pointcut-ref="canyin" />
 </aop:config>

转载地址:http://qlivo.baihongyu.com/

你可能感兴趣的文章
WCF RIA Services使用详解(转载)
查看>>
TabActivity与Activity之间的动画跳转(主要Tabhost中跳转出来的动画效果解决)
查看>>
MySql 密码过期
查看>>
高斯混合模型 GMM
查看>>
[hihoCoder] 后序遍历
查看>>
模型选择的方法:AIC,k-折交叉验证
查看>>
JAVA中的内部类
查看>>
[ Algorithm ] LCS 算法 动态规划解决
查看>>
Kettle提高输入输出数据总结
查看>>
-Linux下的虚拟机安装与管理
查看>>
Servlet和JSP之有关Servlet和JSP的梳理(二)
查看>>
linux下如何制作ext4文件系统镜像
查看>>
GPIO_Mode
查看>>
iOS总结一
查看>>
SimpleDateFormat使用详解
查看>>
如何获取DedeCms相关文章的代码
查看>>
采访~
查看>>
我对接口测试的理解
查看>>
软件工程师能力自我评价
查看>>
Ubuntu下go语言开发环境搭建(GoEclipse配置)
查看>>