spring事物传播propagation类别含义详解

这篇文章主要介绍了spring事物传播propagation类别含义详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在spring事务中针对注解transaction,我们在定义的时候会注明事物的传播类别,默认的是required。

  required:使用当前的事务,如果当前没有事务,则自己新建一个事务,子方法必须运行在一个事务,如果当前存在事务,则加入这个事务,成为一个整体。

  ex:领导没饭吃,我有钱,我自己买了自己吃;领导有饭吃,会分给我一起吃。

  supports:如果当前有事务,则使用事务;如果当前没有事务,则不使用事务。

  ex:领导没饭吃,我也没饭吃;领导有饭吃,我也有饭吃。

  mandatory:该传播必须存在一个事务,如果不存在则抛出异常。

  ex:领导必须管饭,不管饭没饭吃,我超级不开心,老子不干了(抛出异常)。

  requires_new:如果当前有事务,则挂起该事物,并且自己创建一个新的事务给自己使用;如果当前没有事务,则跟required一样

  ex:铃铛有饭吃,我看不上,不要,我自己买着自己吃。

  not_supported:如果当前有事务,则挂起事务,自己不使用事务去运行数据库操作。

  ex:领导有饭吃,分给我吃,我不要放一边,我不吃。

  never:如果当前事务存在,则抛出异常。

  ex:领导有饭吃,我不想吃,不想让领导也吃,我抛出异常。

  nested:如果当前有事务,则开启子事务(嵌套事务),嵌套事务式独立提交或者回滚;

     如果当前没有事务,则跟required一样;

     如果主事务提交,则会携带子事务一起提交;

     如果主事务回滚,则子事务会一起回滚。相反子事务异常,父事务可以回滚或者不会滚(try cache捕获了子事务的异常)。

     ex:领导决策不对。老板怪罪,带着小弟我一起受罪。小弟我出现差错,领导可以选择推卸责任或者帮我一起承担。

测试代码结构:

public void 主事务(领导) save(){
	  主事务save();
	  子事务1save();
	  子事务2save();
}
//子事务注明事物的传播类型
public void 子事物1(我)save(){
	  save1();
	  1/0;
	//此处抛异常
}
public void 子事务2(我)save(){
	  save2();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • MyBatis5中Spring集成MyBatis事物管理

    单独使用MyBatis对事物进行管理 前面MyBatis的文章有写过相关内容,这里继续写一个最简单的Demo,算是复习一下之前MyBatis的内容吧,先是建表,建立一个简单的Student表: create table student ( student_id int auto_increment, student_name varchar(20) not null, primary key(student_id) ) 建立实体类Student.java: public class Studen

  • springboot jta atomikos实现分布式事物管理

    这篇文章主要介绍了springboot jta atomikos实现分布式事物管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 当项目在连接多个数据库时可能会发生事务问题,即一个库的事务不可能去操作另一个数据库的事务,这时就需要使用atomikos对数据库的事务进行统一的管理 第一步添加atomikos的依赖 <dependency> <groupId>org.springframework.boot</groupId&g

  • java仿windows记事本小程序

    本文实例为大家分享了java仿windows记事本小程序的具体代码,供大家参考,具体内容如下 import java.awt.CheckboxMenuItem; import java.awt.Font; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.MenuShortcut; import java.awt.TextA

  • Java仿Windows记事本源代码分享

    本文实例为大家分享了Java仿Windows记事本的具体代码,供大家参考,具体内容如下 先上截图: 源代码: import java.awt.*; import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.undo.UndoManager; import java.awt.event.*; import java.io.*; /** * * @author cj

  • java仿windows记事本功能完整版

    最近学了Java编程,就编了仿windows系统下的记事本练练手,这个记事本实现了windows系统下的大部分功能,只有很少的部分没有实现,比如撤销命令的不完美,这是本人的能力有限,还有那些JMenuItem的是否可用问题,这只是本人比较偷懒,无心再去实现,希望能够与广大的Java爱好者分享我的代码,共同学习进步,我肯定有不足之处,比如有些代码的重复,代码的布置,以及变量的取名问题,希望广大的Java大牛多提宝贵意见,话不多少,直接上代码! package org.mfy.notepad; im

  • Spring + mybatis + mysql使用事物的几种方法总结

    前言 本文主要记录下spring是如何支持事物的,以及在Spring结合mybatis时,可以怎么简单的实现数据库的事物功能,下面话不多说了,来一起看看详细的介绍吧. I. 前提 case1:两张表的的事物支持情况 首先准备两张表,一个user表,一个story表,结构如下 CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL DEFAULT '' COMM

  • JAVA多线程的使用场景与注意事项总结

    前言 我曾经对自己的小弟说,如果你实在搞不清楚什么时候用HashMap,什么时候用ConcurrentHashMap,那么就用后者,你的代码bug会很少. 他问我:ConcurrentHashMap是什么? -.- 编程不是炫技.大多数情况下,怎么把代码写简单,才是能力. 多线程生来就是复杂的,也是容易出错的.一些难以理解的概念,要规避.本文不讲基础知识,因为你手里就有jdk的源码. 线程 Thread 第一类就是Thread类.大家都知道有两种实现方式.第一可以继承Thread覆盖它的run方

  • spring事务Propagation及其实现原理详解

    本文研究的主要是spring事务Propagation及其实现原理,具体介绍如下. 简介 spring目前已是java开发的一个事实标准,这得益于它的便利.功能齐全.容易上手等特性.在开发过程当中,操作DB是非常常见的操作,而涉及到db,就会涉及到事务.事务在平时的开发过程当中,就算没有注意到,程序正常执行不会有副作用,但如果出现了异常,而又没有处理好事务的话,可能就会出现意想不到的结果.spring在事务方面进行了各种操作的封装,特别是声明式事务的出现,让开发变得更加的舒心.spring对事务

  • springboot使用事物注解方式代码实例

    这篇文章主要介绍了springboot使用事物注解方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考 1.在启动类Application中添加注解@EnableTransactionManagement import tk.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springfra

  • spring事物传播propagation类别含义详解

    这篇文章主要介绍了spring事物传播propagation类别含义详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在spring事务中针对注解transaction,我们在定义的时候会注明事物的传播类别,默认的是required. required:使用当前的事务,如果当前没有事务,则自己新建一个事务,子方法必须运行在一个事务,如果当前存在事务,则加入这个事务,成为一个整体. ex:领导没饭吃,我有钱,我自己买了自己吃:领导有饭吃,会分给

  • Spring事务管理原理及方法详解

    这篇文章主要介绍了Spring事务管理原理及方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 事务,在日常开发或者面试中都必定会涉及到.开发工作中,结合数据库开发理解就是:一组dml要么全部成功执行提交,要么因为某一个操作异常,撤销之前所做的成功的操作,整体执行失败.再简单点的一句话:生死与共. 由此,可以看出,事务的必要性:在开发工作中,保证操作数据的安全性.事务的控制也就是保证数据的访问安全性. 一.事务的四大特性 A:原子性(ato

  • Spring声明式事务配置使用详解

    目录 序章 准备工作 创建jdbc.properties 配置Spring的配置文件 声明式事务概念 代码讲解 配置 Spring 的配置文件 创建表 创建组件 测试无事务情况 加入事务 序章 Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作 准备工作 <dependencies> <!-- 基于Maven依赖传递性,导入spring-context依赖即可导入当前所需所有jar包 --> <dependency> <

  • Spring AOP执行先后顺序实例详解

    这篇文章主要介绍了Spring AOP执行先后顺序实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 众所周知,spring声明式事务是基于AOP实现的,那么,如果我们在同一个方法自定义多个AOP,我们如何指定他们的执行顺序呢? 网上很多答案都是指定order,order越小越是最先执行,这种也不能算是错,但有些片面. 配置AOP执行顺序的三种方式: 通过实现org.springframework.core.Ordered接口 @Compo

  • spring boot的maven配置依赖详解

    本文介绍了spring boot的maven配置依赖详解,分享给大家,具体如下: 我们通过引用spring-boot-starter-parent,添加spring-boot-starter-web 可以实现web项目的功能,当然不使用spring-boot-start-web,通过自己添加的依赖包也可以实现,但是需要一个个添加,费时费力,而且可能产生版本依赖冲突.我们来看下springboot的依赖配置: 利用pom的继承,一处声明,处处使用.在最顶级的spring-boot-dependen

  • JSP Spring配置文件中传值的实例详解

    JSP Spring配置文件中传值的实例详解 通过spring提供方法,在配置文件中取传值 调用get方法  targetObject :指定调用的对象       propertyPath:指定调用那个getter方法 例1: public class Test1 { private String name = "nihao"; public String getName() { return name; } } Xml代码 <bean id="t1" cl

  • Spring quartz Job依赖注入使用详解

    Spring quartz Job依赖注入使用详解 一.问题描述: 使用Spring整合quartz实现动态任务时,想在job定时任务中使用某个service时,直接通过加注解@Component.@Autowired是不能注入的,获取的对象为Null.如下面的代码: @Component @PersistJobDataAfterExecution @DisallowConcurrentExecution public class TicketSalePriceLessThanLowestPri

  • spring Boot与Mybatis整合优化详解

    SpringBoot官方文档http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ 关于spring-boot与mybatis整合优化方面的介绍,就是Mybatis-Spring-boot-starter的介绍: 1.取消spring-mybatis.xml配置 ①自动检测已存在的Datasource 之前,需要在spring-mybatis.xml中配置datasource的Bean,现在只需要在applicat

  • xcode 左边导航栏中符合含义详解

    xcode 左边导航栏中符合含义详解 "M" = Locally modified    "U" = Updated in repository  "A" = Locally added    "D" = Locally deleted    "I" = Ignored  "R" = Replaced in the repository  "–" "=&qu

  • spring boot + jpa + kotlin入门实例详解

    spring boot +jpa的文章网络上已经有不少,这里主要补充一下用kotlin来做. kotlin里面的data class来创建entity可以帮助我们减少不少的代码,比如现在这个User的Entity,这是Java版本的: @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String firstName; private S

随机推荐