SpringBoot 事务的属性rollbackFor 与 propagetion

2024-02-11 04:20

本文主要是介绍SpringBoot 事务的属性rollbackFor 与 propagetion,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

rollbackFor介绍

默认情况下,只有出现 RuntimeException 才回滚异常。rollbackFor属性用于控制出现何种异常类型,回滚事务。

  @Override@Transactionalpublic void insert()  {classesMapper.delete(1);//删除班级int n =1/0;//发送运行时异常,数据正常回滚//手动抛出异常数据不回滚//if(true){thow new Exceptiom("手动抛出异常");}testMapper.delete(1);//根据班级删除学生}

默认情况下 @Transactional 只会回滚运行时的异常,如果手动抛出一个异常,那么数据将不会发送回滚,因为他是手动抛出的。
可以通过rollbackFor属性进行配置,让手动抛出的异常也回滚。

	@Override@Transactional(rollbackFor = Exception.class)public void insert()  {//Exception表示异常类型,也可以指定其他的。// Exception表示出现所有异常都回滚数据}

propagetion介绍

事务传播行为:指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。

有两个方法,a方法调用了b方法,而这两个方法都配置了事务,这时候两个方法用的是同一个事务,

   @Transactionalpublic  void a(){test.b();}
  @Transactionalpublic  void b(){}

案例

 @Transactionalpublic  void b(){//记录日志代码....}
  @Transactionalpublic  void a(){try {//执行逻辑....int n=1/0;//发送异常}finally {//这时候并不会成功的记录日志 因为发生异常 回滚了 两个用的是同一个事务test.b(); //记录日志 }}

这时finally用的是同一个事务 因为try的代码导致事务回滚了,所以记录日志的方法没有执行成功。这时候可以使用
@Transactional(propagation = Propagation.REQUIRES_NEW) 表示额外开启一个新的事务,不管有没有try{}里面有没有发生异常互不影响。

    @Transactional(propagation = Propagation.REQUIRES_NEW)public  void b(){//记录日志代码....}  

事务的传播行为

  • REQUIRED 【默认值】需要事务,有则加入,无则创建新事务
  • REQUIRES NEW 需要新事务,无论有无,总是创建新事务
  • SUPPORTS 支持事务,有则加入,无则在无事务状态中运行
  • NOT SUPPORTED 不支持事务,在无事务状态下运行,如果当前存在已有事务,则挂起当前事务
  • MANDATORY 必须有事务,否则抛异常
  • NEVER 必须没事务,否则抛异常

这篇关于SpringBoot 事务的属性rollbackFor 与 propagetion的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/698812

相关文章

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring Boot 事务详解(事务传播行为、事务属性)

《SpringBoot事务详解(事务传播行为、事务属性)》SpringBoot提供了强大的事务管理功能,通过@Transactional注解可以方便地配置事务的传播行为和属性,本文将详细介绍Spr... 目录Spring Boot 事务详解引言声明式事务管理示例编程式事务管理示例事务传播行为1. REQUI

MySQL中的事务隔离级别详解

《MySQL中的事务隔离级别详解》在MySQL中,事务(Transaction)是一个执行单元,它要么完全执行,要么完全回滚,以保证数据的完整性和一致性,下面给大家介绍MySQL中的事务隔离级别详解,... 目录一、事务并发问题二、mysql 事务隔离级别1. READ UNCOMMITTED(读未提交)2

Spring AI 实现 STDIO和SSE MCP Server的过程详解

《SpringAI实现STDIO和SSEMCPServer的过程详解》STDIO方式是基于进程间通信,MCPClient和MCPServer运行在同一主机,主要用于本地集成、命令行工具等场景... 目录Spring AI 实现 STDIO和SSE MCP Server1.新建Spring Boot项目2.a

spring security 超详细使用教程及如何接入springboot、前后端分离

《springsecurity超详细使用教程及如何接入springboot、前后端分离》SpringSecurity是一个强大且可扩展的框架,用于保护Java应用程序,尤其是基于Spring的应用... 目录1、准备工作1.1 引入依赖1.2 用户认证的配置1.3 基本的配置1.4 常用配置2、加密1. 密

Spring Boot 集成 Solr 的详细示例

《SpringBoot集成Solr的详细示例》:本文主要介绍SpringBoot集成Solr的详细示例,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录环境准备添加依赖配置 Solr 连接定义实体类编写 Repository 接口创建 Service 与 Controller示例运行

Spring Cloud GateWay搭建全过程

《SpringCloudGateWay搭建全过程》:本文主要介绍SpringCloudGateWay搭建全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Spring Cloud GateWay搭建1.搭建注册中心1.1添加依赖1.2 配置文件及启动类1.3 测

Java如何将文件内容转换为MD5哈希值

《Java如何将文件内容转换为MD5哈希值》:本文主要介绍Java如何将文件内容转换为MD5哈希值的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java文件内容转换为MD5哈希值一个完整的Java示例代码代码解释注意事项总结Java文件内容转换为MD5

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实

解决Java异常报错:java.nio.channels.UnresolvedAddressException问题

《解决Java异常报错:java.nio.channels.UnresolvedAddressException问题》:本文主要介绍解决Java异常报错:java.nio.channels.Unr... 目录异常含义可能出现的场景1. 错误的 IP 地址格式2. DNS 解析失败3. 未初始化的地址对象解决