Spring 事物的传播特性
来源:互联网 发布:淘宝淘话费失效了 编辑:程序博客网 时间:2024/05/14 09:17
Spring 事务一个被讹传很广说法是:一个事务方法不应该调用另一个事务方法,否则将产生两个事务。结果造成开发人员在设计事务方法时束手束脚,生怕一不小心就踩到地雷。
其实这种是不认识 Spring 事务传播机制而造成的误解,Spring 对事务控制的支持统一在 TransactionDefinition 类中描述,该类有以下几个重要的接口方法:
- int getPropagationBehavior():事务的传播行为
- int getIsolationLevel():事务的隔离级别
- int getTimeout():事务的过期时间
- boolean isReadOnly():事务的读写特性。
很明显,除了事务的传播行为外,事务的其它特性 Spring 是借助底层资源的功能来完成的,Spring 无非只充当个代理的角色。但是事务的传播行为却是 Spring 凭借自身的框架提供的功能,是 Spring 提供给开发者最珍贵的礼物,讹传的说法玷污了 Spring 事务框架最美丽的光环。
所谓事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。Spring 支持 7 种事务传播行为:
- PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
- PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。
- PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。
- PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
- PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
- PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
- PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 PROPAGATION_REQUIRED 类似的操作。
Spring 默认的事务传播行为是 PROPAGATION_REQUIRED,它适合于绝大多数的情况。假设 ServiveX#methodX() 都工作在事务环境下(即都被 Spring 事务增强了),假设程序中存在如下的调用链:Service1#method1()->Service2#method2()->Service3#method3(),那么这 3 个服务类的 3 个方法通过 Spring 的事务传播机制都工作在同一个事务中。
0 0
- Spring 事物的传播特性
- spring事物传播特性
- spring事物传播特性
- 事物—事物的传播性与Spring事物传播特性
- Spring事物传播特性详解
- spring事物的传播
- spring事物传播特性--数据库的隔离级别
- Spring事物的传播特性and隔离级别
- 事物的七个传播特性
- Spring的事物传播行为
- 事物的隔离级别和传播特性
- 事物的特性,隔离级别、传播行为
- 事物的隔离级别和传播特性
- 事物的传播特性和隔离级别
- 事物传播特性
- Spring propagation (Spring 事物的传播)
- Spring事物隔离级别以及事物的七种传播特性详细介绍,以及应用当中需要注意的点
- Spring——事物管理与传播特性
- 分析android crash log(记录未实验)
- 实现多线程有两种方法: Thread类继承和Runnable接口实现
- Win10 MicrosoftEdge的卸载和重装
- es 常用curl命令
- 类和类之间的关系
- Spring 事物的传播特性
- Ubuntu 16 eclipse 4打开后没有菜单栏的解决方法
- Windows下Python机器学习编程环境安装
- Android系统Recovery工作原理之使用update.zip升级过程分析(四)---Android系统Recovery模式的工作原理
- shadowOffset shadowColor 的应用和image中AspectFill中的应用
- UNIX网络编程——TCP的连接建立与终止、基本TCP客户/服务器套接字函数
- JDBC驱动的连接和数据库的加载
- 《HTTP权威指南》——HTTP NG
- 加密和解密,(数字)签名和验证,公钥私钥