情况1:
在声明式事务和注解事务并存的情况下会出现注解事务失效的问题
处理方法如下:
方法1:
<aop:config>
<aop:pointcut id="transactionOperation"
expression="execution(* com.comtop..*.facade.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionOperation" order="1"/>
</aop:config>
在配置中加上参数order="1" 设置时序 order越小 顺序越靠前
方法2:
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="query*" read-only="true"/>
<tx:method name="*NoJTA" read-only="true"/>
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="transactionOperation"
expression="execution(* com.comtop..*.facade.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionOperation" order="1"/>
</aop:config>
<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" />
将<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" />放在<aop:config>和<tx:advice>后面
情况2:
实例化@Controller类时,Spring会自动把关联的@Service(此@Service已做了@Transaction事务注解)类实例化,此时事务并未生效,导致@Transaction注解无效,事务未被注册
解决方法:
<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>
use-default-filters="false" 的意思是不实例化关联到的servcie context:include和context:exclude分别是包含和屏蔽
分享到:
相关推荐
标题“Spring事务管理失效原因汇总”指出了本文的核心内容是分析在使用Spring框架进行事务管理时可能遇到的问题及其原因。描述部分进一步说明了事务失效的后果往往不明显,容易在测试环节被忽略,但在生产环境中出现...
`@Transactional`是Spring提供的核心注解,用于标记在方法级别上需要进行事务处理的代码。当这个注解应用到一个方法上时,Spring会自动为该方法创建并管理事务。注解中可以包含多个属性,如`value`(指定事务管理器...
以下是对"spring注解事务管理"这一主题的详细解释。 ### 1. Spring事务管理的基本概念 Spring事务管理主要分为两种方式:编程式事务管理和声明式事务管理。编程式事务管理是通过编写代码来控制事务的开始、提交、...
Spring提供了多种事务管理方式,其中基于注解的事务管理是近年来常用的模式,因为它简化了代码并提高了可读性。本文将深入探讨Spring中的基于注解的事务管理及其工作原理。 ### 1. Spring事务管理概述 Spring事务...
在Spring Boot应用中,事务管理和多线程是两个非常关键的特性,特别是在处理复杂的业务逻辑时。本示例将深入探讨如何使用注解来实现事务控制以及如何在Spring Boot中运用多线程。 首先,让我们关注"注解事务"。在...
Spring框架的声明式事务处理是Java企业级应用中不可或缺的一部分,它为开发者提供了一种方便、高效的方式来管理事务。在Spring中,事务管理分为编程式和声明式两种方式,而声明式事务处理则是通过配置来控制事务的...
Spring 2.0版本在事务处理方面做了许多改进,使得开发者能够更有效地管理应用程序的事务边界。这篇博客将深入探讨Spring 2.0中的事务处理机制,以及如何通过`applicationContext.xml`配置文件来设置和管理事务。 ...
Spring事务失效Spring事务失效
在这个整合项目中,使用了注释型的事务管理,这意味着事务的开启、提交和回滚都是通过在方法上添加特定的Spring注解(如@Transactional)来实现的。这种方式的优点在于代码更易读,无需在XML配置文件中进行繁琐的...
如果使用@Service 注解注释的类没有被 Spring 容器管理,那么即使方法被@Transactional 注解修饰,事务也不会生效。例如,StudentServiceImpl 类没有被 Spring 容器管理,因此即使方法被@Transactional 注解修饰,...
`@Transactional`是Spring提供的用于标记事务处理的注解。它可以应用于类或方法级别。当应用于方法时,该方法将运行在一个事务中。若应用于类,整个类的所有公共方法都将具有相同的事务属性。注解的属性包括`value`...
Spring框架的声明式事务处理是其企业级应用中的核心特性之一,它允许开发者通过配置来管理事务,而无需在代码中显式地控制事务的开始、提交和回滚。这种方式极大地提高了代码的可读性和可维护性。在这个"spring声明...
Spring 声明式事务处理 Spring 中的事务处理可以分为两种方式:声明式事务处理和编程式事务处理。声明式事务处理通过 AOP 的实现,把事务管理代码作为方面封装到业务代码中,使得事务管理代码和业务代码解藕。这...
Spring 与 各框架的组各下来,版本就特别的多,针对简单的 使用注解来管理事务的,研究了两天,要不网上写的不清楚,要不版本都很旧了,所以就是不回滚,Spring 的配置太灵活了,在加上新手,根本就不可能明白Spring...
Spring 提供了声明式事务管理,允许开发者在不编写事务管理代码的情况下实现事务控制,极大地简化了事务处理。 实验环境主要包括 Eclipse 或 MyEclipse 开发工具,以及 Spring 4.0 及以上版本,JDK 1.7 及以上版本...
这是在java里使用到spring的配置文件里,添加事务处理过程,以至于可以回滚事务,当中使用到拦截器。
在Spring框架中,事务管理是核心特性之一,它允许开发者以声明式或编程式的方式处理应用中的事务。Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何...
总结起来,Spring和Hibernate的事务处理涉及了Spring的声明式事务管理、事务的传播行为、隔离级别以及回滚规则等概念。通过整合这两者,我们可以构建高效、健壮的企业级应用程序,确保数据的完整性和一致性。了解并...
Spring注解的主要目的是消除XML配置文件,使开发者能够通过在类或方法上直接添加注解来声明对象及其依赖关系。这个小例子将深入探讨Spring框架中的主要注解及其用法。 1. `@Component`、`@Service`、`@Repository` ...