spring中事务配置REQUIRES_NEW不起作用
来源:互联网 发布:监控摄像头客户端软件 编辑:程序博客网 时间:2024/06/01 08:25
先看service层的代码,我们希望for中的每一次循环都作为一个事务处理,如果一次循环失败,不希望影响下一次循环,因此使用了try/catch。
public class ServiceA implements IServiceA {public void saveXXX() {for(int i=0;i<10;i++){try {processXXX();} catch (Exception e) {//logger.error(this,e);}}}public void processXXX() {//update table A//update table B}}
由于希望每次循环都作为一个新事务处理,因此将相应的事务传播属性配置为REQUIRES_NEW,事务事务配置如下:
<!-- 配置事务的传播特性 --><tx:advice id="crv_txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="add*" propagation="REQUIRED"/><tx:method name="save*" propagation="REQUIRED"/><tx:method name="delete*" propagation="REQUIRED"/><tx:method name="update*" propagation="REQUIRED"/><tx:method name="do*" propagation="REQUIRED"/> <tx:method name="process*" propagation="REQUIRES_NEW"/></tx:attributes></tx:advice><!-- 那些类的哪些方法参与事务 --><aop:config><aop:pointcut id="crv_allManagerMethod_01" expression="execution(* com.wisoft.crv.bo.*.*(..))"/><aop:advisor pointcut-ref="crv_allManagerMethod_01" advice-ref="crv_txAdvice"/></aop:config>
实际运行的时候发现processXXX()并未作为新事务处理,难道对processXXX()的事务配置不起作用?
分析后发现并不是对processXXX()的事务配置不起作用,而是代码没有正确使用导致事务不生效。spring的事务依赖的是AOP特性,所以代码运行的时候实际上运行的是AOP代理对象,只有调用代理对象的方法才能享受spring事务的便捷。
针对这个问题的解决,可以在ServiceA中注入自己来解决(准确来说注入的是spring AOP生成的代理对象),参考代码如下:
public class ServiceA implements IServiceA {private IServiceA serviceA;public void saveXXX() {for(int i=0;i<10;i++){try {serviceA.processXXX();} catch (Exception e) {//logger.error(this,e);}}}public void processXXX() {//update table A//update table B}}
阅读全文
0 0
- spring中事务配置REQUIRES_NEW不起作用
- Spring事务中Propagation.REQUIRES_NEW不起作用
- spring 事务REQUIRES_NEW 不起作用的解决方法
- spring 事务REQUIRES_NEW 不起作用的解决方法
- spring 事务Propagation.REQUIRES_NEW 不起作用的原因
- spring 事务REQUIRES_NEW 不起作用的解决方法
- Spring中数据库事务配置后不起作用
- spring事务REQUIRED REQUIRES_NEW区别
- Spring事务传播机制-REQUIRES_NEW
- spring配置事务不起作用解决
- spring 配置事务 但事务不起作用?
- spring的事务NEST与REQUIRES_NEW区别
- Spring事务 REQUIRES_NEW、NESTED与NOT_SUPPORTED
- Spring事务REQUIRED与REQUIRES_NEW区别
- spring事务传播机制-REQUIRED嵌套REQUIRES_NEW
- Spring配置的事务注解不起作用问题
- Spring 嵌套事务不起作用
- spring aop 事务不起作用
- hibernate单表,一对多,多对多配置文件详解
- C++中struct和class的区别
- 运行 python manage.py build_solr_schema 出现TypeError
- Linux下搭建Web项目运行环境Tomcat+Mysql+Jdk
- XML讲解
- spring中事务配置REQUIRES_NEW不起作用
- checkbox多选显示同级下一个元素的值
- leetcode 561---- ArrayPartition
- BZOJ 2654: tree kruskal 二分
- 华为手机设置状态栏透明 竟出现灰色的背景问题
- MYSQL 操作中文乱码问题
- String中intern的方法
- 利用poi从jsp页面导出报表到excel
- 使用ffmpeg从视频中截取图像帧