这些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框架的事务传播性提供了灵活性和可定制性,使得我们能够有效地管理事务的行为和边界,确保数据的一致性和可靠性。

结尾

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

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

相关文章
|
21天前
|
Java 数据库 开发者
|
6天前
|
SQL Java 关系型数据库
Spring 事务
Spring 事务
11 1
|
8天前
|
Java 数据库连接 数据库
Spring事务简介,事务角色,事务属性
Spring事务简介,事务角色,事务属性
18 2
|
12天前
|
Java 数据库连接 数据库
16:事务-Java Spring
16:事务-Java Spring
28 5
|
14天前
|
消息中间件 Java 关系型数据库
Spring事务与分布式事务
这篇文档介绍了事务的概念和数据库事务的ACID特性:原子性、一致性、隔离性和持久性。在并发环境下,事务可能出现更新丢失、脏读和不可重复读等问题,这些问题通过设置事务隔离级别(如读未提交、读已提交、可重复读和序列化)来解决。Spring事务传播行为有七种模式,影响嵌套事务的执行方式。`@Transactional`注解用于管理事务,其属性包括传播行为、隔离级别、超时和只读等。最后提到了分布式事务,分为跨库和跨服务两种情况,跨服务的分布式事务通常通过最终一致性策略,如消息队列实现。
|
15天前
|
监控 Java 测试技术
Spring Boot与事务钩子函数:概念与实战
【4月更文挑战第29天】在复杂的业务逻辑中,事务管理是确保数据一致性和完整性的关键。Spring Boot提供了强大的事务管理机制,其中事务钩子函数(Transaction Hooks)允许开发者在事务的不同阶段插入自定义逻辑。本篇博客将详细探讨事务钩子函数的概念及其在Spring Boot中的应用。
37 1
|
18天前
|
XML Java 数据库连接
精妙绝伦:玩转Spring事务编程的艺术
【4月更文挑战第20天】
31 0
|
26天前
|
XML Java 数据库
在Spring框架中,XML配置事务
在Spring框架中,XML配置事务
|
26天前
|
Java 数据库连接 数据库
spring事务失效(疑难杂症)
spring事务失效(疑难杂症)
|
1月前
|
XML Java 关系型数据库
注解驱动事务:Spring中基于注解的事务属性配置详解
注解驱动事务:Spring中基于注解的事务属性配置详解
43 0
注解驱动事务:Spring中基于注解的事务属性配置详解