Spring: @Transactional中的propagation属性
来源:互联网 发布:windows安全性登录 编辑:程序博客网 时间:2024/06/06 07:24
http://www.lifelaf.com/blog/?p=586&utm_source=tuicool&utm_medium=referral
在Spring的事务管理中,我们可以使用@Transactional这一annotation来对事务进行声明式的设定。具体而言,就是在类或者方法前添加@Transactional并传入属性参数以获取所需要的Transaction特性。Spring中的@Transactional有5个属性:Propagation、Isolation、Rollback Rules、Timeout和Read-Only,其中Propagation属性定义了Transaction的边界 — 是否使用Transaction、在Transaction已存在的情况下如何表现等。
Propagation属性
@Transactional中Propagation属性有7个选项可供选择:
- Propagation.MANDATORY。当前方法必须在已经定义的Transaction中运行,如果没有已定义的Transaction则抛出异常。
- Propagation.NESTED。如果没有已定义的Transaction,当前方法新开一个Transaction并在该Transaction中运行。如果存在已定义的Transaction,当前方法在嵌套事务(Nested Transaction)中运行 — 嵌套事务中可以定义储存点,因此可以独立于外部的Transaction而进行rollback。
- Propagation.NEVER。当前方法不应在Transaction中运行,如果存在已经定义的Transaction则抛出异常。
- Propagation.NOT_SUPPORTED。当前方法不应在Transaction中运行,如果存在已经定义的Transaction,则该Transaction暂停(挂起)直至该方法运行完毕。
- Propagation.REQUIRED。默认值。当前方法必须在Transaction中运行。如果存在已经定义的Transaction,则该方法在已定义的Transaction中运行;如果不存在已经定义的Transaction,则该方法新开一个Transaction并在其中运行。
- Propagation.REQUIRES_NEW。当前方法必须在新开的Transaction中运行。如果存在已经定义的Transaction,则该已定义的Transaction暂停直至新开的Transaction执行完毕。
- Propagation.SUPPORTS。当前方法不需要在Transaction中运行,但如果存在已经定义的Transaction,则该方法也可以在Transaction中正常执行。
Propagation属性实例
观察以下两个定义了@Transactional的方法,innerMethod()模拟了Transaction已经存在的情况,outMethod()则模拟了不存在已定义Transaction的情况:
@Transactionalpublic void outMethod() { exampleDAO.doSomething(); innerMethod();}@Transactionalpublic void innerMethod() { exampleDAO.doElse();}
对于这两个方法,定义不同的Propagation属性值所产生的效果如下(Propagation.NESTED的情况较为复杂,在此忽略):
0 0
- Spring: @Transactional中的propagation属性
- Spring: @Transactional中的propagation属性
- Spring: @Transactional中的propagation属性
- Spring: @Transactional中的propagation属性
- Spring Transactional Propagation
- Spring @Transactional propagation 各个属性值的含义
- Spring 之注解事务 @Transactional propagation属性详解
- 给自己的一个研究课题:spring事务、@Transactional标签使用和属性配置@Transactional(propagation=Propagation.REQUIRED,rollbackF
- Spring @Transactional的propagation参数
- 事务457——spring事务注解Transactional的propagation传播属性使用
- 事务457——spring事务注解Transactional的propagation传播属性使用
- Spring事务管理中@Transactional的propagation参数
- Spring事务管理中@Transactional的propagation参数
- Spring事务管理中@Transactional的propagation参数
- Spring事务管理中@Transactional的propagation参数
- Spring Transaction属性 Propagation
- Spring Transaction属性之Propagation
- Spring Transaction属性之Propagation
- MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
- oracle Error: PLS-00905: 对象 HBH.QRY_QUERYDATA 无效
- Triangles HUST 1607 (map<pair,int>,几何)
- 基于 @Transactional 的声明式事务管理
- kickstart安装配置
- Spring: @Transactional中的propagation属性
- 图——广度优先遍历(邻接矩阵存储)
- C++汉诺塔问题
- win7运行第一个opencv程序,基于opencv3.2,官方vc14编译版本,QT5.8 VS2015平台
- bootstrap switch 使用笔记
- Freedom Trail
- Android NDK开发之C调用Java及原生代码断点调试(二)
- 获取客户端IP方案
- PyQt简单的计算器实例讲解