Propagation(事务传播属性)

类别 传播类型 说明
支持当前事务 REQUIRED 如果当前没有事务,就新建一个事务。@Transaction的默认选择
支持当前事务 SUPPORTS 就以非事务的方式运行。
支持当前事务 MANDATORY 如果当前没有事务,就抛出异常。
不支持当前事务 REQUIRES_NEW (隔离) 如果当前存在事务,就把当前事务挂起,执行当前新建十五完成后,上下文事务恢复后再执行。
不支持当前事务 NOT_SUPPORTED(不支持) 以非事务的方式执行操作;如果当前存在事务,就把当前事务挂起,执行当前逻辑,结束后恢复上下文的事务。
不支持当前事务 NEVER(强制非事务) 以非事务的方式执行,如果当前存在事务,则抛出异常。
嵌套事务 NESTED(嵌套事务) 如果当前存在事务,则嵌套在事务中执行。类似RERQUIRED的特征。
调用示例

ServiceA

ServiceA {
void methodA() {
ServiceB.methodB();
}
}

ServiceB

ServiceB {
void methodB() {
}
}
REQUIRED

假设当前运行的事务不在另外一个事务里,那么久新起一个事务;比如,ServiceB.methodB的事务定义级别是PROPAGATION_REQUIRED,那么在执行ServiceA.methodA的时候,ServiceA.methodA已经起了事务。这是调用ServiceB.methodB,ServiceB.methodB看到自己已经执行在ServiceA.methodA的事务内部,就不再启动新事物。如果ServiceA.methodA没有事务,那么B回自己启动一个事务。这样A、B两个方法不管哪个方法发生异常,他们都会一起回滚,一荣俱荣。

SUPPORTS

假设当前在事务中。即以事务的形式执行。假设当前不在一个事务中,那么就以非事务的形式执行

MANDATORY

必须在同一个事务中执行。也就是说它仅仅能被一个父事务调用。否则它就要抛出异常。

REQUIRED_NEW

与REQUIRED相反的是,B方法不管调用它的有没有事务开启,他都会自己开启事务,管好他自己的一某三分地。A,B分别处于两个不同的事务中,两方法的结果互不影响。

NOT_SUPPORTED

当前不支持事务。比方ServiceA.methodA的事务级别是PROPAGATION_REQUIRED 。而ServiceB.methodB的事务级别是PROPAGATION_NOT_SUPPORTED ,那么当执行到ServiceB.methodB时。ServiceA.methodA的事务挂起。而他以非事务的状态执行完,再继续ServiceA.methodA的事务。

NEVER

不能在事务中执行。

如果ServiceA.methodA的事务级别是PROPAGATION_REQUIRED。 而ServiceB.methodB的事务级别是PROPAGATION_NEVER ,那么ServiceB.methodB就要抛出异常了。

NESTED

如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

Spring事务的隔离级别

类型 说明
ISOLATION_DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。另外四个与JDBC的隔离级别相对应
ISOLATION_READ_UNCOMMITTED 这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。
ISOLATION_READ_COMMITTED 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
ISOLATION_REPEATABLE_READ 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
ISOLATION_SERIALIZABLE 是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。

最新文章

  1. 【Machine Learning】KNN算法虹膜图片识别
  2. IO多路复用之epoll总结
  3. Ubuntu下Speedtest的安装
  4. cvReleaseImage 释放内存出错
  5. java版本的sqlHelper
  6. JAVA 遍历文件夹下的所有文件
  7. [原]Unity3D深入浅出 - 新版粒子系统 (Shuriken)
  8. 安装cocoaPod 的问题
  9. fekit前端代码模块化工具
  10. 轻量级的原型设计工具-Axure RP
  11. Jsoup API解析HTML中input标签
  12. shell 脚本运算符
  13. js格式转换
  14. ubuntu频繁出现 安装包依赖关系
  15. 解决org.hibernate.exception.SQLGrammarException:could not insert
  16. Spring的IOC注解开发入门2
  17. Linux根据MAC地址自动设置IP
  18. 首先java中集合类主要有两大分支
  19. mysql 变量名称不能与表字段一致
  20. OpenOffice Word文档转换成Html格式

热门文章

  1. 编译原理_P1003
  2. vue2.0学习之动画
  3. VB.Net 正则表达式测试器
  4. python3下scrapy爬虫(第十四卷:scrapy+scrapy_redis+scrapyd打造分布式爬虫之执行)
  5. Java IO: Reader和Writer
  6. Spring MVC及与structs MVC对比
  7. HttpClient GET和POST请求
  8. 接受H0的坏处|试验误差|置信度由来|
  9. JavaScript的数据类型有哪些?
  10. SpringMVC学习笔记八:文件上传及多个文件上传