大家在使用spring的注解式事务管理时,对事务的传播行为和隔离级别可能有点不知所措,下边就详细的介绍下以备方便查阅。
事务注解方式: @Transactional
当标于类前时, 标示类中所有方法都进行事务处理
例子:
@Transactional
public class TestServiceBean implements TestService {}
当类中某些方法不需要事务时:
@Transactional
public class TestServiceBean implements TestService {
private TestDao dao;
public void setDao(TestDao dao) {
this.dao = dao;
}
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public List<Object> getAll() {
return null;
}
}
事务传播行为介绍:
@Transactional(propagation=Propagation.REQUIRED)
如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)
@Transactional(propagation=Propagation.NOT_SUPPORTED)
容器不为这个方法开启事务
@Transactional(propagation=Propagation.REQUIRES_NEW)
不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
@Transactional(propagation=Propagation.MANDATORY)
必须在一个已有的事务中执行,否则抛出异常
@Transactional(propagation=Propagation.NEVER)
必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.SUPPORTS)
如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
事务超时设置:
@Transactional(timeout=30) //默认是30秒
事务隔离级别:
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
读取未提交数据(会出现脏读, 不可重复读) 基本不使用
@Transactional(isolation = Isolation.READ_COMMITTED)
读取已提交数据(会出现不可重复读和幻读)
@Transactional(isolation = Isolation.REPEATABLE_READ)
可重复读(会出现幻读)
@Transactional(isolation = Isolation.SERIALIZABLE)
串行化
@Transactional(propagation=Propagation.NESTED)
@Transactional (propagation = Propagation.REQUIRED,readOnly=true) //readOnly=true只读,不能更新,删除
@Transactional (propagation = Propagation.REQUIRED,timeout=30)//设置超时时间
@Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)//设置数据库隔离级别
@Transactional(noRollbackFor=Exception.class)//指定不回滚,遇到运行期例外
@Transactional(rollbackFor=Exception.class) //指定回滚,需要捕获的例外
MYSQL: 默认为REPEATABLE_READ级别
SQLSERVER: 默认为READ_COMMITTED
脏读 : 一个事务读取到另一事务未提交的更新数据
不可重复读 : 在同一事务中, 多次读取同一数据返回的结果有所不同, 换句话说,
后续读取可以读到另一事务已提交的更新数据. 相反, "可重复读"在同一事务中多次
读取数据时, 能够保证所读数据一样, 也就是后续读取不能读到另一事务已提交的更新数据
幻读 : 一个事务读到另一个事务已提交的insert数据
分享到:
相关推荐
以下是对"spring注解事务管理"这一主题的详细解释。 ### 1. Spring事务管理的基本概念 Spring事务管理主要分为两种方式:编程式事务管理和声明式事务管理。编程式事务管理是通过编写代码来控制事务的开始、提交、...
2. **声明式事务管理**:这是Spring最常用的方式,通过在配置文件或者使用`@Transactional`注解来定义事务边界,使得事务管理与业务逻辑分离,降低了代码的耦合度。`@Transactional`注解可以应用于方法级别,表示该...
**声明式事务管理** 是通过在方法上添加`@Transactional`注解,让Spring自动管理事务。这种方式更加简洁,降低了代码的复杂性。`@Transactional`可以设置不同的属性,如`propagation`(传播行为)、`isolation`...
实验 "Spring 声明事务" 是 Java 高级编程中的一个重要环节,旨在让学生掌握 Spring 框架中声明式事务管理的配置和使用。在实际应用中,事务管理是确保数据一致性、完整性和可靠性的关键组件。Spring 提供了声明式...
Spring框架在事务管理方面...总结来说,`@Transactional`注解极大地简化了Spring应用程序中的事务管理,使得开发者可以更专注于业务逻辑,而不是事务控制。通过合理的配置和使用,可以有效地保证数据的一致性和完整性。
Spring提供了多种事务管理方式,其中基于注解的事务管理是近年来常用的模式,因为它简化了代码并提高了可读性。本文将深入探讨Spring中的基于注解的事务管理及其工作原理。 ### 1. Spring事务管理概述 Spring事务...
在本文中,我们将深入探讨Spring框架中的事务管理。Spring是一个广泛应用的Java企业级应用开发框架,它提供了强大的事务管理功能,使得开发者可以方便地控制事务的边界,保证数据的一致性和完整性。 首先,理解事务...
声明式事务管理是Spring最常用的事务管理方式,它通过在配置文件或者注解中声明事务边界,将事务管理与业务代码分离。具体分为两种: - XML配置:在Spring的配置文件中,可以使用`<tx:advice>`定义事务处理规则,...
### 深入理解Spring的事务管理机制 #### 一、事务的基本原理 Spring框架的事务管理机制是在Java开发环境中非常重要的一个组成部分,它能够帮助开发者简化事务处理的复杂度,提高应用程序的一致性和可靠性。Spring...
2. 基于注解的声明式事务管理:Spring支持在方法上使用@Transactional注解来标记需要事务管理的方法。这个注解可以设置事务的传播行为(如REQUIRED、REQUIRES_NEW等)、隔离级别、读写模式以及超时时间。例如,`@...
通过理解Spring的事务管理机制,熟练运用`@Transactional`注解,以及深入源码探究其内部工作原理,你将能够更好地应对各种复杂的事务场景。而在这个过程中,优秀的学习资源和实用的开发工具将是你宝贵的助手。
Spring 3.0 提供了两种事务管理配置方法:基于 XML 的事务管理和基于 @Transactional 的事务管理,这两种方法都是为了实现事务管理的目标,分别具有不同的配置方式和优缺点。 基于 XML 的事务管理 这种方法不需要...
2. **声明式事务管理**:这是Spring的一个强大特性,允许开发者在配置文件或注解中声明事务边界,将事务管理与业务代码分离。Spring支持基于XML的配置和基于注解的事务管理。例如,可以使用`@Transactional`注解标记...
编程式事务管理通过TransactionTemplate或直接调用PlatformTransactionManager接口的方法来管理事务,而声明式事务管理则通过在配置文件或注解中定义事务规则,让Spring自动处理事务开始、提交、回滚等操作。...
综上所述,Spring Boot通过`@Transactional`注解实现了简单而强大的事务管理,保证了数据一致性;而`@Async`注解则让我们轻松地实现多线程,提升了应用的并发性能。结合适当的线程池配置,我们可以灵活地调整系统...
2. 声明式事务管理:这是Spring 的主要推荐方式,它通过在配置或者注解中声明事务边界。Spring 使用AOP(面向切面编程)来实现这一功能。我们可以使用@Transactional注解在方法级别声明事务,Spring AOP代理会在方法...
在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...
相比之下,声明式事务管理更为简洁,通过在配置文件或注解中声明事务规则,由Spring框架自动处理事务的开始、提交、回滚等操作。 `spring-tx-3.2.0.RELEASE.jar`是Spring事务管理模块的核心库,它包含了Spring对...
Spring通过AOP(面向切面编程)技术实现了声明式事务管理,可以通过XML配置或注解来实现。 ##### 1. XML配置示例 ```xml <!-- 定义数据源 --> <!-- 配置数据源参数 --> <!-- 定义事务管理器 --> ...