前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring事务的传播属性--@Transaction的Propagation属性

spring事务的传播属性--@Transaction的Propagation属性

作者头像
IT云清
发布2019-01-22 15:08:48
1.9K0
发布2019-01-22 15:08:48
举报
文章被收录于专栏:IT云清IT云清
在Spring的@Transaction中,有个重要的属性:Propagation,指的是事务方法之间发生嵌套调用时,事务的传播行为(当前调用的这个方法的事务,和当前的其他事务之间的关系)。
在TransactionDefinition中定义了7种事务的传播行为,这里简单记录一下。
看一下Propagation的源码:
代码语言:javascript
复制
public enum Propagation {

	//默认值
	//当前有事务,就加入这个事务,没有事务,就新建一个事务
	REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED),
	
  	//当前有事务,就加入这个事务,没有事务,就以非事务的方式执行
	SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS),

	//当前有事务,就加入这个事务,没有事务,就抛出异常
	MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY),

	//新建一个事务执行,如果当前有事务,就把当前的事务挂起
	REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW),

	//在无事务状态下执行,如果当前有事务,就把当前的事务挂起
	NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),

	//在无事务状态下执行,如果当前有事务,会抛出异常
	NEVER(TransactionDefinition.PROPAGATION_NEVER),

	/**
	 * Execute within a nested transaction if a current transaction exists,
	 * behave like PROPAGATION_REQUIRED else. There is no analogous feature in EJB.
	 * <p>Note: Actual creation of a nested transaction will only work on specific
	 * transaction managers. Out of the box, this only applies to the JDBC
	 * DataSourceTransactionManager when working on a JDBC 3.0 driver.
	 * Some JTA providers might support nested transactions as well.
	 * @see org.springframework.jdbc.datasource.DataSourceTransactionManager
	 */
	 //当前有事务,就新建一个事务,嵌套执行,当前无事务,就新建一个事务执行
	 //这个看了不同的文章,说法不一致,建议看下源码注释。
	NESTED(TransactionDefinition.PROPAGATION_NESTED);
	
	private final int value;

	Propagation(int value) { this.value = value; }

	public int value() { return this.value; }

}
//默认值
//当前有事务,就加入这个事务,没有事务,就新建一个事务

REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED),

//当前有事务,就加入这个事务,没有事务,就以非事务的方式执行

SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS),

//当前有事务,就加入这个事务,没有事务,就抛出异常

MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY),

//新建一个事务执行,如果当前有事务,就把当前的事务挂起

REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW),

//在无事务状态下执行,如果当前有事务,就把当前的事务挂起

NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),

//在无事务状态下执行,如果当前有事务,会抛出异常

NEVER(TransactionDefinition.PROPAGATION_NEVER),

//当前有事务,就新建一个事务,嵌套执行,当前无事务,就新建一个事务执行
//这个看了不同的文章,说法不一致,建议看下源码注释。

NESTED(TransactionDefinition.PROPAGATION_NESTED);

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年10月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在Spring的@Transaction中,有个重要的属性:Propagation,指的是事务方法之间发生嵌套调用时,事务的传播行为(当前调用的这个方法的事务,和当前的其他事务之间的关系)。
  • 在TransactionDefinition中定义了7种事务的传播行为,这里简单记录一下。
  • 看一下Propagation的源码:
  • //默认值
  • //当前有事务,就加入这个事务,没有事务,就新建一个事务
  • //当前有事务,就加入这个事务,没有事务,就以非事务的方式执行
  • //当前有事务,就加入这个事务,没有事务,就抛出异常
  • //新建一个事务执行,如果当前有事务,就把当前的事务挂起
  • //在无事务状态下执行,如果当前有事务,就把当前的事务挂起
  • //在无事务状态下执行,如果当前有事务,会抛出异常
  • //当前有事务,就新建一个事务,嵌套执行,当前无事务,就新建一个事务执行
  • //这个看了不同的文章,说法不一致,建议看下源码注释。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档