spring事务隔离级别、传播机制以及简单配置_mysql查看事务隔离级别
org.springframework.transaction
public interface TransactionDefinition 定义符合 Spring 的事务属性的接口。基于类似于 EJB CMT 属性的传播行为定义。 注意,除非启动实际的新事务,否则不会应用隔离级别和超时设置。 仅 PROPAGATION_REQUIRED, PROPAGATION_REQUIRES_NEW and PROPAGATION_NESTED 可能导致这种情况,在其他情况下指定这些设置通常没有意义。此外,并非所有事务管理器都支持这些高级功能,因此在给定非默认值时可能会引发相应的异常。
read-only flag 适用于任何事务上下文,无论是由实际资源事务支持还是在资源级别以非事务方式运行。在后一种情况下,该标志将仅适用于应用程序中的托管资源, 例如 Hibernate Session.
隔离级别
隔离级别 | 描述 |
---|---|
ISOLATION_DEFAULT | 使用基础数据存储的默认隔离级别。 |
ISOLATION_READ_COMMITTED | 指示防止脏读;可能发生非可重复读取和幻像读取。 |
ISOLATION_READ_UNCOMMITTED | 指示可能发生脏读、非可重复读取和幻像读取。 |
ISOLATION_REPEATABLE_READ | 指示防止脏读和非可重复读;可能会发生幻像读取。 |
ISOLATION_SERIALIZABLE | 指示防止脏读、非可重复读取和幻像读取。 |
ISOLATION_READ_COMMITTED
表示防止脏读;可能发生非可重复读取和幻像读取。 此级别仅禁止事务读取包含未提交更改的行。
ISOLATION_READ_UNCOMMITTED
表示可能发生脏读、非可重复读取和幻像读取。 此级别允许一个事务更改的行在提交该行中的任何更改之前由另一个事务读取(“脏读取”)。如果回滚任何更改,则第二个事务将检索到无效行。
ISOLATION_REPEATABLE_READ
表示防止脏读和非可重复读;可能会发生幻像读取。 此级别禁止事务读取包含未提交更改的行,并且还禁止以下情况:一个事务读取行,第二个事务更改行,第一个事务重新读取行,第二次获取不同的值(“不可重复读取”)。
ISOLATION_SERIALIZABLE
表示防止脏读、非可重复读取和幻像读取。 此级别包括ISOLATION_REPEATABLE_READ中的禁止,并进一步禁止以下情况:一个事务读取满足某个条件的所有行,第二个事务插入满足该条件的行,第一个事务针对同一条件重新读取,在第二次读取中检索其他“幻像”行
传播行为
传播行为 | 描述 |
---|---|
PROPAGATION_REQUIRED | 支持当前事务;如果不存在,请创建一个新。 |
PROPAGATION_REQUIRES_NEW | 创建新事务,暂停当前事务(如果存在)。 |
PROPAGATION_NESTED | 如果当前事务存在,则在嵌套事务中执行,否则行为类似于PROPAGATION_REQUIRED。 |
PROPAGATION_NEVER | 不支持当前事务;如果当前事务存在,则引发异常。 |
PROPAGATION_SUPPORTS | 支持当前事务;如果不存在,则以非事务方式执行。 |
PROPAGATION_NOT_SUPPORTED | 不支持当前事务;而是始终以非事务性方式执行。 |
PROPAGATION_MANDATORY | 支持当前事务;如果当前事务不存在,则引发异常。 |
PROPAGATION_REQUIRED
支持当前事务;如果不存在,请创建一个新。类似于同名的 EJB 事务属性。 这通常是事务定义的默认设置,通常定义事务同步作用域。
PROPAGATION_REQUIRES_NEW
创建新事务,暂停当前事务(如果存在)。类似于同名的 EJB 事务属性。 注意:实际的事务暂停不会在所有事务管理器上开箱即用。这尤其适用于JtaTransactionManager,它要求将其提供给它(在标准Java EE中是特定于服务器的)。javax.transaction.TransactionManager
作用域始终定义自己的事务同步。现有同步将被挂起并相应地恢复。
PROPAGATION_NESTED
如果当前事务存在,则在嵌套事务中执行,否则行为类似于PROPAGATION_REQUIRED。EJB 中没有类似的功能。 注意:实际创建嵌套事务仅适用于特定的事务管理器。开箱即用,这仅适用于在处理 JDBC 3.0 驱动程序时的 JDBC DataSourceTransactionManager。某些 JTA 提供程序可能也支持嵌套事务。
PROPAGATION_NEVER
不支持当前事务;如果当前事务存在,则引发异常。类似于同名的 EJB 事务属性。 请注意,事务同步在某个范围内不可用。
PROPAGATION_SUPPORTS
支持当前事务;如果不存在,则以非事务方式执行。类似于同名的 EJB 事务属性。 注意:对于具有事务同步功能的事务管理器, PROPAGATION_SUPPORTS 与完全没有事务略有不同,因为它定义了同步可能适用的事务范围。因此,相同的资源 (a JDBC Connection, a Hibernate Session, etc) 将在整个指定范围内共享。注意,确切的行为取决于事务管理器的实际同步配置!
一般而言,使用 PROPAGATION_SUPPORTS 用心!特别是,不要依赖 PROPAGATION_REQUIRED or PROPAGATION_REQUIRES_NEW 在 PROPAGATION_SUPPORTS作用域(这可能会导致运行时的同步冲突)。如果这种嵌套是不可避免的,请确保适当地配置事务管理器(通常切换到“实际事务上的同步”)。
PROPAGATION_NOT_SUPPORTED
不支持当前事务;而是始终以非事务性方式执行。类似于同名的 EJB 事务属性。 注意:实际的事务暂停不会在所有事务管理器上开箱即用。这尤其适用于JtaTransactionManager,它要求将其提供给它(在标准Java EE中是特定于服务器的)。javax.transaction.TransactionManager
请注意,事务同步在某个范围内不可用。现有同步将被挂起并相应地恢复。
PROPAGATION_MANDATORY
支持当前事务;如果当前事务不存在,则引发异常。类似于同名的 EJB 事务属性。 请注意,作用域内的事务同步将始终由周围的事务驱动
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179052.html原文链接:https://javaforall.cn
相关文章
- MySQL变量配置实战指南(mysql变量配置)
- 学习MySQL服务安装命令指南(mysql服务安装命令)
- MySQL免安装版的简单配置指南(mysql免安装版的配置)
- MySQL 环境变量配置指南(mysql环境变量配置)
- 的配置MySQL .cnf配置指南:增强性能和安全性.(mysql.cnf)
- JBoss如何配置MySQL数据库(jboss配置mysql)
- 使用Hive将MySQL完美配置(hive配置mysql)
- 如何删除MySQL中的表(怎么删除mysql的表)
- MySQL安装及配置指南(mysql安)
- MySQL打开数据库表:操作指南(mysql 打开数据库表)
- MySQL数据库的简要介绍(mysql简述)
- 配置MySQL环境变量配置指南(mysql 环境 变量)
- 掌握MySQL最常用的操作指令解析(mysql中使用最频繁)
- CRT实现MySQL数据库配置指南(crt配置 mysql)
- 如何在MySQL中使用ini文件来配置数据库(mysql中ini没有)
- APP直接访问MySQL快速便捷的解决方案(app直接mysql)
- 连接基于CMD终端快速配置MySQL远程连接(cmd mysql 远程)
- MySQL三种用户及其特点简介(mysql三种用户)
- 合并不同MYSQL数据库的方法(mysql不同数据库合并)