SPRING的事务传播特性学习整理标记
来源:互联网 发布:网络端口有几根线 编辑:程序博客网 时间:2024/06/05 19:52
T1:
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
来源:牛客网
这是我在spring 3 API中看到的,然后自己翻译了一下,但是对于事务同步范围这个不是很懂,有知道的欢迎在下面评论,感谢!
PROPAGATION_REQUIRED
This is typically the default setting of a transaction definition, and typically defines a transaction synchronization scope.
默认设置,后面的不懂
PROPAGATION_SUPPORTS
PROPAGATION_NOT_SUPPORTED
PROPAGATION_REQUIRES_NEW
PROPAGATION_NESTED
PROPAGATION_NEVER
PROPAGATION_MANDATORY
来源:牛客网
事务属性的种类: 传播行为、隔离级别、只读和事务超时
a) 传播行为定义了被调用方法的事务边界。
传播行为
意义
PROPERGATION_MANDATORY
表示方法必须运行在一个事务中,如果当前事务不存在,就抛出异常
PROPAGATION_NESTED
表示如果当前事务存在,则方法应该运行在一个嵌套事务中。否则,它看起来和 PROPAGATION_REQUIRED 看起来没什么俩样
PROPAGATION_NEVER
表示方法不能运行在一个事务中,否则抛出异常
PROPAGATION_NOT_SUPPORTED
表示方法不能运行在一个事务中,如果当前存在一个事务,则该方法将被挂起
PROPAGATION_REQUIRED
表示当前方法必须运行在一个事务中,如果当前存在一个事务,那么该方法运行在这个事务中,否则,将创建一个新的事务
PROPAGATION_REQUIRES_NEW
表示当前方法必须运行在自己的事务中,如果当前存在一个事务,那么这个事务将在该方法运行期间被挂起
PROPAGATION_SUPPORTS
表示当前方法不需要运行在一个是事务中,但如果有一个事务已经存在,该方法也可以运行在这个事务中
b) 隔离级别
在操作数据时可能带来 3 个副作用,分别是脏读、不可重复读、幻读。为了避免这 3 中副作用的发生,在标准的 SQL 语句中定义了 4 种隔离级别,分别是未提交读、已提交读、可重复读、可序列化。而在 spring 事务中提供了 5 种隔离级别来对应在 SQL 中定义的 4 种隔离级别,如下:
隔离级别
意义
ISOLATION_DEFAULT
使用后端数据库默认的隔离级别
ISOLATION_READ_UNCOMMITTED
允许读取未提交的数据(对应未提交读),可能导致脏读、不可重复读、幻读
ISOLATION_READ_COMMITTED
允许在一个事务中读取另一个已经提交的事务中的数据(对应已提交读)。可以避免脏读,但是无法避免不可重复读和幻读
ISOLATION_REPEATABLE_READ
一个事务不可能更新由另一个事务修改但尚未提交(回滚)的数据(对应可重复读)。可以避免脏读和不可重复读,但无法避免幻读
ISOLATION_SERIALIZABLE
这种隔离级别是所有的事务都在一个执行队列中,依次顺序执行,而不是并行(对应可序列化)。可以避免脏读、不可重复读、幻读。但是这种隔离级别效率很低,因此,除非必须,否则不建议使用。
c) 只读
如果在一个事务中所有关于数据库的操作都是只读的,也就是说,这些操作只读取数据库中的数据,而并不更新数据,那么应将事务设为只读模式( READ_ONLY_MARKER ) , 这样更有利于数据库进行优化 。
因为只读的优化措施是事务启动后由数据库实施的,因此,只有将那些具有可能启动新事务的传播行为 (PROPAGATION_NESTED 、 PROPAGATION_REQUIRED 、 PROPAGATION_REQUIRED_NEW) 的方法的事务标记成只读才有意义。
如果使用 Hibernate 作为持久化机制,那么将事务标记为只读后,会将 Hibernate 的 flush 模式设置为 FULSH_NEVER, 以告诉 Hibernate 避免和数据库之间进行不必要的同步,并将所有更新延迟到事务结束。
d) 事务超时
如果一个事务长时间运行,这时为了尽量避免浪费系统资源,应为这个事务设置一个有效时间,使其等待数秒后自动回滚。与设
置“只读”属性一样,事务有效属性也需要给那些具有可能启动新事物的传播行为的方法的事务标记成只读才有意义。
- SPRING的事务传播特性学习整理标记
- spring的事务传播特性
- Spring事务的传播特性
- Spring事务的传播特性
- spring事务的传播特性
- Spring 事务的传播特性
- spring事务的传播特性
- spring的事务传播特性
- Spring的事务传播特性
- spring事务的传播特性
- SPRING的事务传播特性
- SPRING的事务传播特性
- spring事务的传播特性
- Spring事务的传播特性
- Spring的事务传播特性
- spring事务的传播特性
- SPRING的事务传播特性
- Spring事务的传播特性
- 集成学习
- spring mvc拦截器和<mvc:annotation-driven />的详解
- Java三大主流框架概述(转载)
- HDU1281棋盘游戏(二分匹配与增广链)
- 服务器如何判断客户端非正常掉线-心跳连接
- SPRING的事务传播特性学习整理标记
- python写入mysql乱码
- Android Wi-Fi源码分析之wpa_supplicant初始化(一)
- ios 动画
- mysql数据库更改root密码以及授权用户DML权限
- RXSwift常用操作
- Android箭头图标移动动画实现
- HttpClient 教程 (一)
- android 模拟器INSTALL_FAILED-NO_MATCHING_ABIS:Failed to extract native libraries,res=-113