@Transactional配置详解:
Spring提供的<tx:annotation-driven/>用于开启对注解事务管理的支持,从而能识别Bean类上的
@Transactional注解元数据,其具有以下属性:
• transaction-manager:指定事务管理器名字,默认为transactionManager,当使用其他名字时需要明确指定;
• proxy-target-class:表示将使用的代码机制,默认false表示使用JDK代理,如果为true将使用CGLIB代理
• order:定义事务通知顺序,默认Ordered.LOWEST_PRECEDENCE,表示将顺序决定权交给AOP来处理。
Spring使用@Transaction来指定事务属性,可以在接口、类或方法上指定,如果类和方法上都指定了
@Transaction,则方法上的事务属性被优先使用,具体属性如下:
• value:指定事务管理器名字,默认使用<tx:annotation-driven/>指定的事务管理器,用于支持多事务管理器环境;
• propagation:指定事务传播行为,默认为Required,使用Propagation.REQUIRED指定;
• isolation:指定事务隔离级别,默认为“DEFAULT”,使用Isolation.DEFAULT指定;
• readOnly:指定事务是否只读,默认false表示事务非只读;
• timeout:指定事务超时时间,以秒为单位,默认-1表示事务超时将依赖于底层事务系统;
• rollbackFor:指定一组异常类,遇到该类异常将回滚事务;
• rollbackForClassname:指定一组异常类名字,其含义与<tx:method>中的rollback-for属性语义完全一样;
• noRollbackFor:指定一组异常类,即使遇到该类异常也将提交事务,即不回滚事务;
• noRollbackForClassname:指定一组异常类名字,其含义与<tx:method>中的no-rollback-for属性语义完全一样;
使用@Transactional注解事务管理需要特别注意以下几点:
• 如果在接口、实现类或方法上都指定了@Transactional 注解,则优先级顺序为方法>实现类>接口;
• 建议只在实现类或实现类的方法上使用@Transactional,而不要在接口上使用,这是因为如果使用JDK代理机制是没问题,因为其使用基于接口的代理;而使用使用CGLIB代理机制时就会遇到问题,因为其使用基于类的代理而不是接口,这是因为接口上的@Transactional注解是“不能继承的”;
具体请参考基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。
• 在Spring代理机制下(不管是JDK动态代理还是CGLIB代理),“自我调用”同样不会应用相应的事务属性,其语义和<tx:tags>中一样;
• 默认只对RuntimeException异常回滚;
• 在使用Spring代理时,默认只有在public可见度的方法的@Transactional 注解才是有效的,其它可见度(protected、private、包可见)的方法上即使有@Transactional 注解也不会应用这些事务属性的,Spring也不会报错,如果你非要使用非公共方法注解事务管理的话,可考虑使用AspectJ。
相关推荐
在默认配置下,每个数据库事务对应一个持久化上下文,即“Entity Manager per application transaction”模式。通过`@PersistenceContext`注入的EntityManager实际上是一个代理,它在事务的生命周期内管理数据库操作...
Spring 的 Annotation-Driven 配置事务管理器详解(多数据源配置) Spring 框架提供了强大的事务管理机制,通过使用 Annotation-Driven 配置,可以方便地管理事务。在多数据源配置中,spring 的 Annotation-Driven...
Spring中的@Transactional注解是Spring框架提供的一个核心特性,它用于声明式事务管理,使得开发者可以在不直接接触事务API的情况下,实现事务的控制。这个注解可以用在类或方法级别,来指定事务的传播行为、隔离...
可以通过`@Transactional`注解的`timeout`属性或者XML配置中的`propagation`元素的`timeout`属性来设置事务的超时时间,单位为秒。 以上就是Spring框架中常见的事务配置方式及其相关概念,理解并熟练掌握这些知识...
1. Spring事物配置详解: 在Spring框架中,事务管理是核心功能之一,它允许开发者以声明式或编程式的方式来管理事务。声明式事务管理通过在XML配置文件或注解中定义事务边界,使得事务处理更加简洁。例如,可以使用...
3. **基于注解的配置**:通过在类或方法上使用`@Transactional`注解,Spring可以在运行时自动生成代理。例如: ```java @Service @Transactional(readOnly = true) public class UserService { // ... @...
在Spring框架中,事务管理是通过tx命名空间来配置的,例如:,这个配置项会启用事务注解的支持,使得开发者可以使用@Transactional注解来标记需要事务处理的方法或类。 在使用Spring的事务管理时,需要指定事务管理...
本文将详细解析Spring在JSP中的事务配置过程。 首先,理解事务管理的重要性。在数据库操作中,事务是一系列操作的集合,这些操作要么全部执行,要么都不执行,以保证数据的一致性。在分布式系统或并发环境中,事务...
7. **@Transactional注解详解** 配置事务管理器需要定义一个`<bean>`,如`DataSourceTransactionManager`,并将其与数据源关联。然后,通过`<tx:annotation-driven>`启用基于注解的事务管理,这使得Spring能够扫描...
《Spring声明式事务管理详解——基于tx和aop命名空间的XML配置及@Transactional注解》 在企业级应用开发中,事务管理是至关重要的,它确保数据的一致性和完整性。Spring框架提供了两种主要的事务管理方式:编程式...
### Spring 事务传播属性详解 #### 一、Spring 事务基础概述 在深入探讨Spring框架中的事务传播属性之前,我们先来简要回顾一下Spring事务的基础概念。Spring框架提供了强大的事务管理功能,允许开发者通过声明式...
在Spring框架中,注解是实现业务层事务处理的关键技术之一。这篇“Spring注解学习手札(五)——业务层事务处理”深入...理解并熟练掌握`@Transactional`及其相关配置,对于提升代码质量、保证系统稳定性具有重要意义。
三、配置实例详解 1. 配置事务管理器 首先,我们需要在Spring的配置文件中定义一个PlatformTransactionManager,最常见的是DataSourceTransactionManager,它对应于数据库连接池的事务管理。 ```xml ``` 2. ...
Spring 2.5引入了注解事务管理,可以直接在Service层的方法上添加@Transactional注解,简化配置。例如: ```java @Service public class UserService { @Transactional public void addUser(User user) { // ...
5. **Spring Boot的自动配置**:在Spring Boot项目中,通过@EnableTransactionManagement和适当的依赖,Spring Boot能自动配置DataSource和TransactionManager,并且可以通过@Transactional注解进行事务控制。...
**标题:“经典Hibernate配置详解”** 在Java世界中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使开发者能够用面向对象的方式处理数据。本篇文章将深入探讨Hibernate的核心配置,...
本篇文章将详解在 Spring Boot 中使用数据库事务,包括如何创建事务、如何配置事务、如何使用事务等。 事务的概念 在数据库系统中,事务是一个单一的、逻辑上的一致的操作序列。事务可以是一个简单的数据库操作,...
### Spring事务管理详解 在Java应用开发中,事务管理是一个重要的环节,特别是在处理数据库操作时。Spring框架提供了强大的事务管理机制,使得开发者能够方便地控制事务的开启与提交。然而,在实际开发过程中,经常...