`

spring事务失效情况分析

阅读更多

详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt113

 

<!--[if !supportLists]-->一、<!--[endif]-->声明式事务和注解事务并存的情况下,事务失效。

 

该情况常见配置如下:

 

<!--事务声明-->

<bean name="transactionManager"

    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

       <property name="dataSource" ref="dataSource"></property>

    </bean>

<!--声明式事务 –->

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

       <tx:attributes>

           <tx:method name="insert*" propagation="REQUIRED" read-only="false"

              rollback-for="java.lang.Exception" />

           <tx:method name="save*" propagation="REQUIRED" read-only="false"

              rollback-for="java.lang.Exception" />

           <tx:method name="update*" propagation="REQUIRED" read-only="false"

              rollback-for="java.lang.Exception" />

           <tx:method name="modify*" propagation="REQUIRED" read-only="false"

              rollback-for="java.lang.Exception" />

           <tx:method name="delete*" propagation="REQUIRED" read-only="false"

              rollback-for="java.lang.Exception" />

           <tx:method name="find*" propagation="SUPPORTS" />

           <tx:method name="get*" propagation="SUPPORTS" />

           <tx:method name="select*" propagation="SUPPORTS" />

       </tx:attributes>

    </tx:advice>

   

    <aop:config>

       <aop:pointcut id="pc"

           expression="execution(* com.suning.sop.*.service.*(..))" />

       <aop:advisor advice-ref="txAdvice" pointcut-ref="pc" />

    </aop:config>

 

<!—注解式事务 –->

<tx:annotation-driven

proxy-target-class="true"

transaction-manager="transactionManager"/>

 

 

 

解决方法:声明优先级,order,值越大优先级越低

将上例中,<aop:config>节点修改成如下所示

    <aop:config>

       <aop:pointcut id="pc"

           expression="execution(* com.suning.sop.*.service.*(..))" />

       <aop:advisor advice-ref="txAdvice" pointcut-ref="pc" order="1"/>

    </aop:config>

 

<!--[if !supportLists]-->二、<!--[endif]-->ControllerService层和Dao层全部使用注解生成benaService层方法也使用注解声明事,这种情况由于 @Controller 会把 关联的@Servie自动实例化,而此时Service层中声明的事务并没有被实例化,导致事务失效。

解决方法:

 

<context:component-scan base-package="com.comtop"  use-default-filters="false" >

        <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>    

</context:component-scan>    

  

<context:component-scan base-package="com.comtop">    

        <context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation"/>    

</context:component-scan>   

Include:把@Controller关联的@Service自动实例化

exclude:屏蔽@Service自动实例化

<!--[if !supportLists]-->三、<!--[endif]-->三层都使用注解,事务也使用注解声明。事务失效

Spring 会先加载声明在xml文件中的Bean

其次是加载<context:component-scan>标签声明的包中,

声明了@Controller,@Service,@Component,@Re @Repository的类

最后是 @Transactional 标记,但上一步处理component-scan 声明的包时,类包含的@Transactional标记没有被处理,所以事务控制失效。

 

解决方法:

 

Service 层的类使用xml文件声明bean,但是事务控制仍然使用@Transactional注解来声明,事务控制才能生效

分享到:
评论

相关推荐

    Spring事务管理失效原因汇总

    标题“Spring事务管理失效原因汇总”指出了本文的核心内容是分析在使用Spring框架进行事务管理时可能遇到的问题及其原因。描述部分进一步说明了事务失效的后果往往不明显,容易在测试环节被忽略,但在生产环境中出现...

    Spring事务失效问题分析及解决方案

    Spring事务失效问题分析及解决方案 在本文中,我们将详细介绍 Spring 中的事务失效问题分析及解决方案。Spring 事务机制是基于 AOP 实现的,通过使用 @Transaction 注解来标注事务方法。然而,在实际开发中,可能会...

    Spring自定义切面事务问题

    2. **Spring 自定义切面事务失效的原因** - 当我们创建自定义切面并通过`@Aspect`注解将其标记为切面时,如果没有正确地处理事务管理器和切面之间的关系,可能会导致事务失效。 - 默认情况下,Spring 的AOP代理...

    Spring的事务10种常见失效场景总结.zip

    以下是对Spring事务10种常见失效场景的详细分析: 1. **未开启事务**:如果在需要事务控制的方法中忘记添加`@Transactional`注解,Spring将不会自动进行事务管理,导致事务失效。记得在服务层方法上正确使用该注解...

    spring事务总结.docx

    然而,在实际开发过程中,经常会遇到一些关于Spring事务的问题,如事务失效、事务回滚、大事务问题以及编程式事务等。本文将深入探讨这些问题,并给出相应的解决方案。 #### 一、事务不生效的原因及解决办法 1. **...

    spring事务-项目案例-PPT解读.zip

    spring事务_案例_PPT 一、事务传播机制的demo案例,内容包括: 1.业务代码列举7种事务传播机制的情况,每个测试方法都附带日志分析记录、使用场景和实际场景,小白也能看得懂!!! 2.在测试类Test包下,使用juniter...

    关于shiro中部分SpringCache失效问题的解决方法

    在使用Springboot和shiro集成时,发现部分service的缓存和事务失效,通过debug代码发现这些有问题的service实例都不是代理生成的,导致事务和缓存失效。进一步分析发现,这些有问题的service全部被shiro的realm所...

    spring杂谈 作者zhang KaiTao

    他还分享了解决数据库读写分离、错误处理、依赖注入失效等问题的经验,以及在特定环境下如IDEA内嵌Jetty运行Spring项目时可能遇到的异常处理。 总的来说,这些内容涵盖了Spring的多个重要方面,包括事务管理、AOP、...

    ElasticJob与SpringBatch的结合使用

    通过上述分析,我们可以看到 Elastic-Job 和 Spring Batch 在数据处理方面具有极高的互补性。Elastic-Job 的分布式特性和 Spring Batch 的批处理能力相结合,不仅能够提高数据处理的效率,还能够确保数据处理的一致...

    spring

    源码分析有助于开发者理解Spring的工作原理,而工具可能是用于辅助Spring开发的实用程序或插件。 压缩包内的文件名暗示了这些内容可能来自一系列教程或课程,覆盖了Spring的不同方面: 1. SSH2_25-26-27-28-29-30....

    spring+struts+hibernate项目debug总结.rar

    常见的调试问题包括实体类的映射文件(hbm.xml)错误、SQL查询语句异常、事务管理失效等。使用Hibernate的show_sql属性可以帮助我们查看生成的SQL,通过对比实际数据库操作,找出问题所在。此外,还要注意N+1查询问题...

    多数据源事务jta测试

    - **Spring框架的支持**:Spring提供了声明式事务管理,简化了JTA的使用,通过`@Transactional`注解可以轻松地开启和管理事务。 测试环节可能会涉及到创建单元测试和集成测试,确保在各种情况下事务都能正确处理。...

    hands-high-performance-spring-5

    - **Actuator**: Spring Boot Actuator提供了丰富的健康检查、性能指标和日志分析功能,帮助诊断和优化系统。 - **JMX集成**: 利用JMX进行远程管理和监控,及时发现和解决问题。 7. **测试与持续集成** - **单元...

    一段Spring代码引起的调用绑定总结

    AOP是Spring框架中的另一个重要特性,它提供了一种模块化横切关注点(如日志、事务管理)的方法。AOP通过切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点表达式(Pointcut Expression)等概念,使得...

    Struts2+Spring3.0+Hibernate开发问题总结+知识讲解

    开发中常见的问题可能有Bean的生命周期管理、事务失效、AOP不生效等,这些问题通常需要检查Spring配置、Bean的定义和依赖关系。 3. **Hibernate**:Hibernate是一个ORM(对象关系映射)框架,它简化了数据库操作。...

    源码分析专题之Mybatis课程一之源码分析与实现.pdf

    综上所述,Mybatis源码分析涵盖了大量的知识点,包括设计思想、架构组件、缓存机制、事务处理以及与Spring的整合等。通过深入源码的学习,开发者能够更加精准地掌握Mybatis的内部机制,以及如何在实际项目中高效地...

    java事务回滚失败问题分析

    在Spring框架中,默认情况下,对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作。因此,在编程中,需要注意检查型异常和非检查型异常的区别,并采取相应的处理方法。 一、检查型异常和非...

    Struts2.2.3 Spring3.0.5 Hibernate3.6.5 sql server整合实例源码呈现

    Spring框架是一个全面的企业级应用开发框架,它支持AOP(面向切面编程)、DI(依赖注入)和声明式事务管理等核心特性。Spring3.0.5版本引入了更多新功能,如Spring MVC的改进、对JSR-303 Bean Validation的支持和...

Global site tag (gtag.js) - Google Analytics