Spring 声明式事务,propagation属性列表
PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务(还不是太明白),如果当前没有事务,就新建一个事务。
1 ISOLATION_DEFAULT 默认的隔离级别
下面几个都是 JDBC isolation levels 一一对应:
2 ISOLATION_READ_UNCOMMITTED Connection.TRANSACTION_READ_UNCOMMITTED
指示防止发生脏读的常量;不可重复读和虚读有可能发生。
3 ISOLATION_READ_COMMITTED Connection.TRANSACTION_READ_COMMITTED
指示可以发生脏读 (dirty read)、不可重复读和虚读 (phantom read) 的常量。
4 ISOLATION_REPEATABLE_READ Connection.TRANSACTION_REPEATABLE_READ
指示防止发生脏读和不可重复读的常量;虚读有可能发生。
5 ISOLATION_SERIALIZABLE Connection.TRANSACTION_SERIALIZABLE
指示防止发生脏读、不可重复读和虚读的常量。
脏读 dirty reads:当事务读取还未被提交的数据时,就会发生这种事件。举例来说:Transaction 1 修改了一行数据,然后 Transaction 2 在 Transaction 1 还未提交修改操作之前读取了被修改的行。如果 Transaction 1 回滚了修改操作,那么 Transaction 2 读取的数据就可以看作是从未存在过的。
不可重复的读 non-repeatable reads:当事务两次读取同一行数据,但每次得到的数据都不一样时,就会发生这种事件。举例来说:Transaction 1 读取一行数据,然后 Transaction 2 修改或删除该行并提交修改操作。当 Transaction 1 试图重新读取该行时,它就会得到不同的数据值(如果该行被更新)或发现该行不再存在(如果该行被删除)。
虚读 phantom read:如果符合搜索条件的一行数据在后面的读取操作中出现,但该行数据却不属于最初的数据,就会发生这种事件。举例来说:Transaction 1 读取满足某种搜索条件的一些行,然后 Transaction 2 插入了符合 Transaction 1 的搜索条件的一个新行。如果 Transaction 1 重新执行产生原来那些行的查询,就会得到不同的行。
分享到:
相关推荐
下面详细介绍 Spring 的几种事务传播特性: 1. **PROPAGATION_REQUIRED** - **定义**:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。 - **应用场景**:这是最常用的一种事务传播特性...
### Spring事务的传播特性和隔离级别 #### 一、事务的基本概念 在计算机科学中,事务(transaction)是指一系列操作的集合,这些操作要么全部成功完成,要么全部失败回滚,确保数据的一致性和完整性。事务具备四个...
Spring事务管理的隔离级别包括: - `DEFAULT`:使用数据库的默认隔离级别。 - `READ_UNCOMMITTED`:最低隔离级别,允许读取未提交的数据。 - `READ_COMMITTED`:只允许读取已提交的数据,防止脏读。 - `REPEATABLE_...
本文将深入探讨Spring中的几种事务配置方式,帮助开发者更好地理解和运用。 1. **编程式事务管理** 编程式事务管理是在代码中显式调用事务API来控制事务的开始、提交、回滚等操作。这种方式直接在业务逻辑代码中...
在Spring事务中,有几种常见的隔离级别可供选择,包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。每种隔离级别都有其特定的并发控制策略,...
此外,Spring 事务管理还涉及到事务隔离级别(如 READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE)和事务超时设置等高级特性。这些都可以通过配置或者注解进行定制,以满足不同业务场景的需求。 ...
这是PlatformTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。具体取决于使用的数据库类型。 #### 2. ISOLATION_READ_UNCOMMITTED 最低级别的隔离级别,允许一个事务读取另一个事务未提交的数据...
标题“Spring事务管理失效原因汇总”指出了本文的核心内容是分析在使用Spring框架进行事务管理时可能遇到的问题及其原因。描述部分进一步说明了事务失效的后果往往不明显,容易在测试环节被忽略,但在生产环境中出现...
这种方式下,事务的传播行为、隔离级别、读写模式等都可通过注解的属性进行配置。 4. Spring Data JPA与事务管理 当使用Spring Data JPA时,事务管理可以自动与Repository方法关联。只需在Repository接口的方法上...
这里我们主要探讨的是"Spring基于XML方式配置事务",这涉及到Spring的事务管理器、事务属性以及如何在XML配置文件中定义这些元素。 首先,Spring的事务管理分为两种模式:编程式事务管理和声明式事务管理。编程式...
总结来说,本例子通过`TransactionProxyFactoryBean`和`@Transactional`展示了如何在Spring中实现声明式事务管理,这两种方式都利用了AOP来封装事务逻辑,使代码更加整洁,降低了事务管理的复杂性。在实际应用中,...
- 注解:在需要事务控制的方法上使用`@Transactional`注解,该注解可以指定事务的传播行为、隔离级别、读写模式等属性。 接下来,我们将通过以下几个步骤来搭建Spring事务操作环境: 1. **引入依赖**:在项目中...
主要分为以下几种: 1. **ISOLATION_DEFAULT**:使用数据库的默认隔离级别。 2. **ISOLATION_READ_UNCOMMITTED**:最低的隔离级别,允许其他事务看到未提交的数据。这可能导致脏读、不可重复读和幻读。 3. **...
每个事务在其执行过程中,应与其他事务隔离,以避免数据损坏。 4. **持久性 (Durability)**:一旦事务成功完成,其效果将是永久性的,即使之后系统出现故障也不会受到影响。 #### 四、Spring 事务管理 Spring 提供...
这通常需要调整事务隔离级别或使用乐观锁等策略解决。 10. **分布式事务**:在分布式系统中,Spring也提供了对JTA(Java Transaction API)的支持,允许跨多个数据源管理事务,例如使用Atomikos或Bitronix等JTA实现...
Spring 提供了几种事务隔离级别,包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE),以应对不同的并发控制需求。每种隔离级别都有其防止并发...
可以通过`@Transactional`注解在方法上声明事务,指定事务的传播行为、隔离级别、超时限制等属性。当方法被调用时,Spring会自动开启事务,执行完毕后根据异常情况决定是否提交或回滚。 2. **编程式事务管理**:...
总结来说,`Spring_tx编程式事务代码`主要涉及Spring的`TransactionTemplate`类,它是Spring事务管理的一种便捷工具,可以帮助开发者以编程的方式更加方便地控制事务的生命周期,同时保持代码的简洁和可维护性。...
2. **声明事务边界**:在需要事务控制的方法上添加@Transactional注解,指定事务的传播行为、隔离级别、读写模式等属性。 3. **创建事务代理**:对于需要事务控制的业务服务,使用TransactionProxyFactoryBean创建...