当前位置:首页 > java技术文章 > Spring中事务传播行为的介绍

深入理解Spring中事务传播行为

  • 发布时间:
  • 作者:码农之家原创
  • 点击:111

这篇文章主要知识点是关于spring、事务传播行为、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

JavaScript网页动画设计
  • 类型:JavaScript大小:26 MB格式:PDF作者:夏皮罗
立即下载

Spring中事务传播行为的介绍

传播行为定义关于客户端和被调用方法的事务边界。Spring定义了7种截然不同的传播行为。

  • 1,PROPAGATION_MANDATORY,表示该方法必须运行在一个事务中。如果当前没有事务正在发生,则抛出异常。
  • 2,PROPAGATION_NESTED,表示如果当前有一个事务正在运行当中,则该方法应该运行在一个嵌套事务中。被嵌套的事务可以独立于封装事务进行提交或回滚。如果封装事务不存在,则行为就像PROPAGATION_REQUIRED一样。
  • 3,PROPAGATION_NEVER,表示当前方法不应该在一个事务上下文中运行。如果当前有一个事务正在运行,则抛出异常。
  • 4,PROPAGATION_NOT_SUPPORTED,表示该方法不应该在一个事务中运行。如果当前有一个事务正在运行,它将在该方法运行期间被挂起。
  • 5,PROPAGATION_REQUIRED,表示当前方法必须在一个事务中运行。如果当前有一个事务正在运行,该方法将会在那个事务中运行。否则的话,就会开始一个新的事务。
  • 6,PROPAGATION_REQUIRES_NEW,表示当前方法必须在它自己的事务里运行。一个新的事务将被启动,而且如果有一个现有事务正在运行的话,则它将在当前方法运行期间被挂起。
  • 7,PROPAGATION_SUPPORTS,表示当前事务不需要事务性上下文,但是如果一个事务正在运行的话,它也可以在这个事务里运行。

读上述7种事务的一些说明如下。

第一种事务,mandatory,表示强制的,即方法必须在一个事务中运行,否则,抛出异常。它要求必须处在一个封装事务里,且它自己不会开启新的事务。

第二种事务,nested,嵌套的,它要求当前已经有一个封装事务了,且它自己会作为一个内部嵌套的事务来运行。如果当前没有封装事务,则它就不管外界了,自己启动一个事务来运行。

第三种事务,never,不作为事务,自己不启动事务,且外界不能有事务。

第四种和第七种一起来看,SUPPORTS,表示该方法不需要事务上下文,但外界如果有事务的话,它也支持在一个外界事务里运行。NOT_SUPPORTED,表示该方法不应在一个事务上下文里运行,如果外界有事务,那么就把外界事务挂起,在运行该方法。NOT_SUPPORTED和NEVER的区别在于,当外界有事务时,NOT_SUPPORTED不会抛出异常。

第五种和第六种一起来看,REQUIRED表示当前方法必须在一个事务中运行,如果外界有事务,那么它就依赖于外界事务。如果外界没有事务,它就自己开启一个事务。REQUIRED和NESTED的区别在于,当外界有事务时,NESTED会再创建一个事务,而REQUIRED不创建新事务,只是在外界事务里运行。REQUIRES_NEW表示当前方法必须在自己的事务里运行。如果外界有事务,则把外界事务挂起。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对码农之家的支持。如果你想了解更多相关内容请查看下面相关链接

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

推荐内容

图文讲解jQuery Validation PlugIn的使用方法

python实现自动网页截图并裁剪图片实例分享

小结jquery.messager.js插件导致页面抖动的解决方案

Spring Boot 发送邮件功能实例代码

总结phpmyadmin出现#2003服务器无响应解决方案

展开 +

收起 -

Java 相关电子书
学习笔记
网友NO.579861

SpringBoot JdbcTemplate批量操作的示例代码

前言 在我们做后端服务Dao层开发,特别是大数据批量插入的时候,这时候普通的ORM框架(Mybatis、hibernate、JPA)就无法满足程序对性能的要求了。当然我们又不可能使用原生的JDBC进行操作,那样尽管效率会高,但是复杂度会上升。 综合考虑我们使用Spring中的JdbcTemplate和具名参数namedParameterJdbcTemplate来进行批量操作。 改造前 在开始讲解之前,我们首先来看下之前的JPA是如何批量操作的。 实体类User: public class AppStudent { private Integer id; private Integer classId; private String name; private Integer age; //伪代码、省略构造和get、set方法} DynamicQuery伪代码: @Repositorypublic class DynamicQueryImpl implements DynamicQuery { @PersistenceContext private EntityManager em; public EntityManager getEntityManager() { return em; } //其实就是for循环、使用EntityManager的persist方法循环保存而已 @Override public T void saveList(ListT res……

网友NO.317153

Spring MVC中Ajax实现二级联动的简单实例

今天写项目遇到了二级联动,期间遇到点问题,写个博客记录一下。 后台Controller: @RequestMapping("/faultType")@ResponseBodypublic MapString,Object faultType(int id,HttpServletRequest request)throws IOException{String ReturnMessage = "";//获取所有子类故障类型ListFaultType fauList=faultTypeService.getById(id);if(fauList.size()0){request.setAttribute("childType", fauList);ReturnMessage = "OK";}else {ReturnMessage = "未找到信息";}//*************************************************************MapString,Object ReturnMAP = new HashMapString,Object();ReturnMAP.put("childType", fauList);return ReturnMAP;} 前台JSP: div class="col-sm-3"div class="form-group"label class="col-3 control-label no-padding-right"故障类型: /labelselect name="faulttype" id="faulttype" onchange="javascript:typeChange()"c:forEach items="${faultlist }" var="faulist"option value="${faulist.faultId }"${faulist.faultContent }/option/c:forEach/select/div/divdiv class="col-s……

网友NO.199503

在Spring Boot应用程序中使用Apache Kafka的方法步骤详解

第1步:生成我们的项目: Spring Initializr 来生成我们的项目。我们的项目将提供Spring MVC / Web支持和Apache Kafka支持。 第2步:发布/读取Kafka主题中的消息: bpublic/b bclass/b User { bprivate/b String name; bprivate/b bint/b age; bpublic/b User(String name, bint/b age) { bthis/b.name = name; bthis/b.age = age; }} 第3步:通过 application.yml 配置文件配置Kafka: 我们需要创建配置文件。我们需要以某种方式配置我们的Kafka生产者和消费者,以便能够发布和读取与主题相关的消息。相比建立一个使用 @Configuration 标注的Java类,我们可以直接使用配置文件application.properties或application.yml。Spring Boot让我们避免像过去一样编写的所有样板代码,同时为我们提供了更加智能的配置应用程序的方法,如下所示: server: port: 9000spring: kafka: consumer: bootstrap: localhost:9092 group-id: group_id auto-offset-reset: earliest key-deserialize……

网友NO.165375

spring接口通过配置支持返回多种格式(xml,json,html,excel)

1. 简介 本文主要给大家介绍使用SpringMVC的后端服务如何通过配置来支持多种返回值类型(xml,json,html,excel) 这里的代码使用的是springboot,下载地址:https://github.com/xiagn825/springboot-todolist/tree/springboot-ContentNegotiation 2. 基础概念 2.1 HttpHeader中Content-Type和Accept设置的区别 Accept:接口要返回给客户端的数据格式 curl --header 'Accept:application/json' http://localhost:8080/todo Content-Type:客户端发送给服务器端的数据格式 curl -X PUT --header 'Content-Type:application/json' -d '{"title":"周末日程","content":"睡觉"}' http://localhost:8080/todo 2.2 SpringMVC生成输出的两种方式 1) 当服务端使用Restful的方式,只为客户端的ajax或其他服务端请求提供数据时,通常会使用@ResponseBody来标识你的返回,这时候Spring使用HttpMessageConverter来把返回的对象格式化成所需的格式。 2) 当你需要提供表现层(比如:HTML),这时候……

网友NO.611048

.NET程序员如何入门Spring Boot详解

前言 本篇文章将教你作为一个.NET程序员如何快入门Spring Boot。你不需要用Eclipse,也不需要用IDEA。已经习惯了VS,其他的IDE…… 但不得不说VS Code很厉害,一用就喜欢。微软给VS Code提供了编写Java的插件,你可以在VS Code上愉快地写Java。 一、环境搭建 (1) 安装Java、配置环境变量。(教程很多,这里不多说) (2) 安装Maven和配置。参考https://www.cnblogs.com/eagle6688/p/7838224.html (3) 安装VS Code (4) 安装Java开发插件,配置VS Code的Java开发环境。(这一步微软替我们简化了,下载Vs Code Java安装程序,直接安装就可以编写Java代码了,下载连接 http://aka.ms/vscode-java-installer-win 此安装程序可以重复运行) 二、构建Maven项目 (1)访问 http://start.spring.io/ (2)选择Maven Project、Java、Spring Boot 版本 2.1.6,如图 点击 Generate the Project 下载项目压缩包 (3)解压后用VS Code打开……

<
1
>

电子书 编程教程 文档 软件 源码 视频

Copyright 2018-2020 xz577.com 码农之家

本站所有电子书资源不再提供下载地址,只分享来路

免责声明:网站所有作品均由会员网上搜集共同更新,仅供读者预览及学习交流使用,下载后请24小时内删除

版权投诉 / 书籍推广 / 赞助:QQ:520161757