这些Spring事务传播性类型,你有必要了解下

简介: 在Spring框架中,事务传播性是一个重要概念,决定了事务在方法间的传播和交互方式。了解不同的事务传播特性可以帮助我们设计可靠、灵活的系统。

前言

  在Spring框架中,事务传播性(Transaction Propagation)用于定义在方法调用期间,事务应该如何传播和参与到现有的事务中。Spring框架支持多种事务传播行为,下面是常见的事务传播性类型及其使用场景和代码示例:

REQUIRED(默认)

使用场景:

  当前方法必须在一个事务内执行,如果当前存在事务,则方法在该事务中运行;如果当前没有事务,则为方法创建一个新事务。

代码示例:

```java
@Transactional
public void methodA() {
    // 执行业务逻辑
    methodB();
}

@Transactional(propagation = Propagation.REQUIRED)
public void methodB() {
    // 执行业务逻辑
}
```

REQUIRES_NEW

使用场景:

  当前方法必须在一个新的事务中执行,如果当前存在事务,则将其挂起。

代码示例:

@Transactional
public void methodA() {
   
   
    // 执行业务逻辑
    methodB();
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodB() {
   
   
    // 执行业务逻辑
}

SUPPORTS:

使用场景:

  当前方法支持事务,如果当前存在事务,则方法在该事务中运行;如果当前没有事务,则方法以非事务方式运行。

代码示例:

@Transactional
public void methodA() {
   
   
    // 执行业务逻辑
    methodB();
}

@Transactional(propagation = Propagation.SUPPORTS)
public void methodB() {
   
   
    // 执行业务逻辑
}

NOT_SUPPORTED:

使用场景:

  当前方法不支持事务,如果当前存在事务,则将其挂起。

代码示例:

@Transactional
public void methodA() {
   
   
    // 执行业务逻辑
    methodB();
}

@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void methodB() {
   
   
    // 执行业务逻辑
}

MANDATORY:

使用场景:

  当前方法必须在一个事务中执行,如果当前存在事务,则方法在该事务中运行;如果当前没有事务,则抛出异常。

代码示例:

@Transactional
public void methodA() {
   
   
    // 执行业务逻辑
    methodB();
}

@Transactional(propagation = Propagation.MANDATORY)
public void methodB() {
   
   
    // 执行业务逻辑
}

NEVER:

使用场景:

  当前方法不应该在一个事务中执行,如果当前存在事务,则抛出异常。

代码示例:

@Transactional
public void methodA() {
   
   
    // 执行业务逻辑
    methodB();
}

@Transactional(propagation = Propagation.NEVER)
public void methodB() {
   
   
    // 执行业务逻辑
}

NESTED:

使用场景:

  如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则创建一个新事务。

代码示例:

@Transactional
public void methodA() {
   
   
    // 执行业务逻辑
    methodB();
}

@Transactional(propagation = Propagation.NESTED)
public void methodB() {
   
   
    // 执行业务逻辑
}

总结

  Spring框架的事务传播性提供了灵活性和可定制性,使得我们能够有效地管理事务的行为和边界,确保数据的一致性和可靠性。

结尾

  如果觉得对你有帮助,可以多多评论,多多点赞哦,也可以到我的主页看看,说不定有你喜欢的文章,也可以随手点个关注哦,谢谢。

  我是不一样的科技宅,每天进步一点点,体验不一样的生活。我们下期见!

相关文章
|
3月前
|
SQL Java 关系型数据库
Spring事务传播机制:7种姿势教你玩转"事务接力赛"
事务传播机制是Spring框架中用于管理事务行为的重要概念,它决定了在方法调用时事务如何传递与执行。通过7种传播行为,开发者可以灵活控制事务边界,适应不同业务场景。例如:REQUIRED默认加入或新建事务,REQUIRES_NEW独立开启新事务,NESTED支持嵌套回滚等。合理使用传播机制不仅能保障数据一致性,还能提升系统性能与健壮性。掌握这“七种人格”,才能在复杂业务中游刃有余。
|
4月前
|
Java 关系型数据库 数据库
深度剖析【Spring】事务:万字详解,彻底掌握传播机制与事务原理
在Java开发中,Spring框架通过事务管理机制,帮我们轻松实现了这种“承诺”。它不仅封装了底层复杂的事务控制逻辑(比如手动开启、提交、回滚事务),还提供了灵活的配置方式,让开发者能专注于业务逻辑,而不用纠结于事务细节。
|
9月前
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——常见问题总结
本文总结了Spring Boot中使用事务的常见问题,虽然通过`@Transactional`注解可以轻松实现事务管理,但在实际项目中仍有许多潜在坑点。文章详细分析了三个典型问题:1) 异常未被捕获导致事务未回滚,需明确指定`rollbackFor`属性;2) 异常被try-catch“吃掉”,应避免在事务方法中直接处理异常;3) 事务范围与锁范围不一致引发并发问题,建议调整锁策略以覆盖事务范围。这些问题看似简单,但一旦发生,排查难度较大,因此开发时需格外留意。最后,文章提供了课程源代码下载地址,供读者实践参考。
244 0
|
9月前
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
1196 0
|
9月前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——事务相关
本文介绍Spring Boot事务配置管理,阐述事务在企业应用开发中的重要性。事务确保数据操作可靠,任一异常均可回滚至初始状态,如转账、购票等场景需全流程执行成功才算完成。同时,事务管理在Spring Boot的service层广泛应用,但根据实际需求也可能存在无需事务的情况,例如独立数据插入操作。
251 0
|
7月前
|
人工智能 Java 数据库连接
Spring事务失效场景
本文深入探讨了Spring框架中事务管理可能失效的几种常见场景及解决方案,包括事务方法访问级别不当、方法内部自调用、错误的异常处理、事务管理器或数据源配置错误、数据库不支持事务以及不合理的事务传播行为或隔离级别。通过合理配置和正确使用`@Transactional`注解,开发者可以有效避免这些问题,确保应用的数据一致性和完整性。
429 10
|
6月前
|
Java 关系型数据库 MySQL
【Spring】【事务】初学者直呼学会了的Spring事务入门
本文深入解析了Spring事务的核心概念与使用方法。Spring事务是一种数据库事务管理机制,通过确保操作的原子性、一致性、隔离性和持久性(ACID),维护数据完整性。文章详细讲解了声明式事务(@Transactional注解)和编程式事务(TransactionTemplate、PlatformTransactionManager)的区别与用法,并探讨了事务传播行为(如REQUIRED、REQUIRES_NEW等)及隔离级别(如READ_COMMITTED、REPEATABLE_READ)。
494 1
|
5月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
967 0
|
6月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
716 0
|
2月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
333 3