【面试题精讲】SpringBoot的传播机制详解

简介: 【面试题精讲】SpringBoot的传播机制详解

首发博客地址[1]

系列文章地址[2]


Spring Boot 是基于 Spring 框架的快速开发框架,提供了许多便捷的特性和机制来简化开发过程。在 Spring Boot 中,事务的传播机制是通过@Transactional 注解来实现的。

@Transactional 注解可以用于方法、类或接口上,用于标识方法或类中的所有方法需要进行事务管理。通过设置@Transactional 注解的 propagation 属性,可以指定事务的传播行为。

事务的传播行为分为以下几种:

  1. REQUIRED:表示当前方法必须在一个事务内运行。如果当前已经存在事务,则加入该事务;如果当前不存在事务,则创建一个新的事务。
  2. SUPPORTS:表示当前方法支持事务。如果当前存在事务,则加入该事务;如果当前不存在事务,则以非事务方式运行。
  3. MANDATORY:表示当前方法必须在一个事务内运行。如果当前不存在事务,则抛出异常。
  4. REQUIRES_NEW:表示当前方法必须在一个新的事务内运行。如果当前存在事务,则挂起该事务并创建一个新的事务。
  5. NOT_SUPPORTED:表示当前方法不支持事务。如果当前存在事务,则挂起该事务。
  6. NEVER:表示当前方法不支持事务。如果当前存在事务,则抛出异常。
  7. NESTED:表示当前方法必须在一个嵌套事务内运行。如果当前存在事务,则在嵌套事务内运行;如果当前不存在事务,则创建一个新的事务。

下面是一个使用 Spring Boot 传播机制的示例:

@Service
@Transactional(propagation = Propagation.REQUIRED)
public class UserService {
    @Autowired
    private UserRepository userRepository;
    public void createUser(User user) {
        // 保存用户信息
        userRepository.save(user);
        // 调用其他方法,如果其他方法也有@Transactional注解,则会参与到当前事务中
        updateUserStatus(user.getId());
    }
    @Transactional(propagation = Propagation.REQUIRED)
    public void updateUserStatus(Long userId) {
        // 更新用户状态
        userRepository.updateStatus(userId);
    }
}

在上面的示例中,UserService 类的 createUser 方法使用了@Transactional 注解,并设置了传播行为为 REQUIRED,表示该方法必须在一个事务内运行。在该方法中,先保存用户信息到数据库,然后调用了 updateUserStatus 方法。由于 updateUserStatus 方法也使用了@Transactional 注解,并且传播行为也为 REQUIRED,所以它会参与到当前事务中,保证了两个方法的操作在同一个事务内执行。

通过使用@Transactional 注解,我们可以方便地控制事务的传播行为,实现对数据库操作的事务管理。

参考资料

[1]

首发博客地址: https://blog.zysicyj.top/

[2]

系列文章地址: https://blog.zysicyj.top/categories/技术文章/后端技术/系列文章/面试题精讲/

本文由 mdnice 多平台发布

相关文章
|
Java 应用服务中间件 开发者
Java面试题:解释Spring Boot的优势及其自动配置原理
Java面试题:解释Spring Boot的优势及其自动配置原理
406 0
|
消息中间件 缓存 Java
Spring Boot最经典的20道面试题,你都会了吗?
Spring Boot最经典的20道面试题,你都会了吗?
2068 0
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
1179 2
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
Java 数据库连接 Maven
最新版 | SpringBoot3如何自定义starter(面试常考)
在Spring Boot中,starter是一种特殊的依赖,帮助开发人员快速引入和配置特定功能模块。自定义starter可以封装一组特定功能的依赖和配置,简化项目中的功能引入。其主要优点包括模块化、简化配置、提高代码复用性和实现特定功能。常见的应用场景有短信发送模块、AOP日志切面、分布式ID生成等。通过创建autoconfigure和starter两个Maven工程,并编写自动配置类及必要的配置文件,可以实现一个自定义starter。最后在测试项目中验证其有效性。这种方式使开发者能够更便捷地管理和维护代码,提升开发效率。
2094 1
最新版 | SpringBoot3如何自定义starter(面试常考)
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
1047 37
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
架构师 Java 开发者
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
在40岁老架构师尼恩的读者交流群中,近期多位读者成功获得了知名互联网企业的面试机会,如得物、阿里、滴滴等。然而,面对“Spring Boot自动装配机制”等核心面试题,部分读者因准备不足而未能顺利通过。为此,尼恩团队将系统化梳理和总结这一主题,帮助大家全面提升技术水平,让面试官“爱到不能自已”。
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
4297 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
前端开发 Dubbo Java
spring面试题_spring mvc面试题_springboot面试题库
spring面试题_spring mvc面试题_springboot面试题库
|
监控 NoSQL Java
【面试高频 time:】SpringBoot整合Redisson实现分布式锁
【面试高频 time:】SpringBoot整合Redisson实现分布式锁
234 0
下一篇
开通oss服务