`
小鑫。
  • 浏览: 134785 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring注解式声明事务相关问题

阅读更多
以下整理自己在使用Spring(3.1.1)注解式声明事务遇到的相关问题。

1、方法的访问权限只有在public时,@Transactional才会生效。
引用

摘自http://docs.spring.io/spring/docs/3.2.12.RELEASE/spring-framework-reference/htmlsingle/

Method visibility and @Transactional
When using proxies, you should apply the @Transactional annotation only to methods with public visibility. If you do annotate protected, private or package-visible methods with the @Transactional annotation, no error is raised, but the annotated method does not exhibit the configured transactional settings. Consider the use of AspectJ (see below) if you need to annotate non-public methods.


2、同一个类中都声明@Transactional的方法调用,第二个方法的@Transactional不会生效。
引用

摘自http://docs.spring.io/spring/docs/3.2.12.RELEASE/spring-framework-reference/htmlsingle/

In proxy mode (which is the default), only external method calls coming in through the proxy are intercepted. This means that self-invocation, in effect, a method within the target object calling another method of the target object, will not lead to an actual transaction at runtime even if the invoked method is marked with @Transactional.


3、嵌套事务(子事务以REQUIRES_NEW方式)造成数据库死锁
引用

摘自http://stackoverflow.com/questions/17747906/getting-deadlock-found-when-trying-to-get-lock-try-restarting-transaction

MySQL's InnoDB engine sports row-level locking, which can lead to deadlocks even when your code is inserting or updating a single row (specially if there are several indexes on the table being updated). Your best bet is to design the code around this in order to retry a transaction if it fails due to a deadlock. Some useful info about MySQL deadlock diagnose and possible workarounds is available here.

An interesting implementation of deadlock retry via AOP in Spring is available here. This way you just need to add the annotation to the method you want to retry in case of deadlock.


4、在事务提交\事务回滚之后,处理一些事情。
// 在业务代码中,调用此代码
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter(){
	// 重写afterCommit或者afterCompletion
    // 在事务提交\事务回滚之后,就会执行
});
分享到:
评论

相关推荐

    使用Spring的声明式事务----Annotation注解方式

    在Spring中,我们可以使用XML配置文件来声明事务,但更常见的是通过Java注解来完成。这里我们将重点讨论Annotation注解方式。主要涉及的注解有`@Transactional`,`@Rollback`以及`@Transactional(propagation=...

    Spring声明式事务处理

    文件名为`Spring声明式事务处理-1.mht`到`Spring声明式事务处理-5.mht`,通过阅读这些文件,你将能够深入理解Spring声明式事务处理的各个方面,包括配置、使用场景、最佳实践以及常见问题的解决方法。

    spring+mybatis的声明式事务

    在Spring中,声明式事务主要通过AOP(面向切面编程)实现,它允许我们在不修改业务代码的情况下,通过XML配置或Java配置,以及注解来控制事务的边界。 3. **XML配置事务** 在Spring的XML配置文件中,可以通过`...

    spring声明式事务处理demo

    1. **配置Spring容器**:在Spring的配置文件(如`applicationContext.xml`)中,我们需要定义一个`<tx:annotation-driven>`元素,这将启用基于注解的声明式事务管理。同时,需要配置数据源(DataSource)和事务管理...

    spring声明式事务配置

    根据提供的信息,我们可以深入探讨Spring框架中的声明式事务配置及其多种实现方式。声明式事务管理是一种简化事务管理的方式,它允许开发人员通过配置而非编程来指定事务边界,从而减少了代码的复杂性并提高了可维护...

    实验 spring 声明事务

    实验 "Spring 声明事务" 是 Java 高级编程中的一个重要环节,旨在让学生掌握 Spring 框架中声明式事务管理的配置和使用。在实际应用中,事务管理是确保数据一致性、完整性和可靠性的关键组件。Spring 提供了声明式...

    spring声明式事务管理配置方式

    在Spring框架中,声明式事务管理是实现事务处理的一种高效且灵活的方式,它允许开发者通过在服务层方法上添加特定的注解来控制事务的边界,而无需编写大量的事务管理代码。这种方式使得业务逻辑和事务控制得以分离,...

    全面分析 Spring 的编程式事务管理及声明式事务管理

    2. **基于注解的声明式事务管理**: 使用@Transactional注解在方法上,Spring会自动管理事务的生命周期。这个注解可以设置事务属性,如isolation(隔离级别)、propagation(传播行为)、timeout(超时时间)等。 **...

    使用Spring的声明式事务----AOP方式

    本文将深入探讨如何利用Spring的声明式事务来处理业务操作中的数据一致性问题,以及相关源码解析。 首先,我们需要了解Spring的AOP概念。AOP是一种编程范式,它允许程序员定义“切面”,这些切面可以包含业务逻辑的...

    Hibernate编程式事务与Spring Aop的声明式事务(spring与hibernate集成)

    2. **@Transactional注解**: 在需要事务的方法上添加`@Transactional`注解,声明事务边界。注解可以包含隔离级别、 propagation行为(如REQUIRED、REQUIRES_NEW等)和其他属性。 3. **AOP代理**: Spring通过AOP代理...

    Spring声明式事务配置管理方法

    Spring 声明式事务管理是Spring框架中的一个重要特性,它允许开发者在不编写任何事务管理代码的情况下,通过配置来管理事务。这种方式极大地简化了事务处理,并提高了代码的可维护性。以下是关于Spring声明式事务...

    Spring使用XML配置声明式事务

    在Spring框架中,声明式事务管理是实现事务处理的一种高效且灵活的方式,它允许开发者通过XML配置或注解来定义事务边界,而无需在业务逻辑代码中显式地调用开始、提交或回滚事务的方法。这篇博文"Spring使用XML配置...

    spring声明事务的配置

    Spring 2.x引入了基于注解的事务管理,可以直接在方法上使用`@Transactional`注解来声明事务,简化了配置过程。此外,Spring Boot简化了Spring应用的启动和配置,包括事务管理,使得在现代项目中使用声明式事务更加...

    Spring 整合mybatis(注解&xml版声明式事务).pdf

    在声明式事务管理中,我们可以在业务逻辑方法上添加注解或配置XML来控制事务,而不需要在代码中显式地使用事务API来管理事务。这种方式可以让开发者专注于业务逻辑的实现,而由框架来保证事务的ACID属性。 在整合的...

    spring+ibatis声明式事务Demo_

    在Spring中,可以使用`@Transactional`注解在方法级别声明事务边界。当该方法执行时,Spring会自动处理事务的开启、提交或回滚,这极大地简化了事务管理。 在“TransactionDemo”项目中,以下是一些关键知识点: 1...

    Spring 2.5整合iBATIS 2.3并使用Spring的声明式事务管理

    7. **声明式事务管理**:Spring提供了声明式事务管理,我们可以在方法级别或类级别通过@Transactional注解来控制事务的边界。例如: ```java @Service public class UserService { @Autowired private UserMapper...

    Spring Boot多数据源(支持Spring声明式事务切换和回滚).pdf

    《Spring Boot多数据源(支持Spring声明式事务切换和回滚)》 Spring Boot多数据源技术是构建高效、灵活的多租户SaaS架构的关键。在本文中,我们将深入探讨如何实现动态数据源切换,支持Spring声明式事务管理,并讨论...

Global site tag (gtag.js) - Google Analytics