Spring的两种事务管理机制,面试这样答当场入职!

这篇具有很好参考价值的文章主要介绍了Spring的两种事务管理机制,面试这样答当场入职!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:
博主在最近的几次面试中,大中小厂都问到了Spring的事务相关问题,这块知识确实是面试中的重点内容,因此结合所看的书籍,在这篇文章中总结下。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读,感谢大佬的关注。

如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~

小威在此先感谢各位小伙伴儿了😁

Spring的两种事务管理机制,面试这样答当场入职!,秋招总结&小白入坑Java,spring,面试,事务,dubbo,原力计划

以下正文开始

Spring的两种事务管理机制,面试这样答当场入职!,秋招总结&小白入坑Java,spring,面试,事务,dubbo,原力计划


Spring事务包括声明式事务管理和注解式事务管理,我们通过概念和小demo的形式一步一步地来一起学习这个知识点!

声明式事务管理

首先简单介绍下Spring的声明式事务管理:

声明式事务管理是指通过配置来实现事务管理,我们只需定义事务边界和事务属性,不需要显式编写事务管理的代码。

那么我们如何实现呢?

首先配置事务管理器和数据源:通过配置 <bean> 元素,使用 TransactionManager 类型的 Bean 来提供事务管理器的实例,并使用 DataSource 类型的 Bean 来提供数据源。

接着定义事务边界:使用 <tx:advice> 元素来定义事务边界和事务属性,指定哪些方法需要进行事务管理。

还需要配置事务通知:使用 <aop:config> 元素来启用事务管理功能并将事务通知应用到指定的切入点上。

理论知识先讲到这里,储备这些知识可以和面试官进行交流~

Spring的两种事务管理机制,面试这样答当场入职!,秋招总结&amp;小白入坑Java,spring,面试,事务,dubbo,原力计划

注解式管理事务

除了上面提到的声明式管理之外,Spring提供了一种更加简单且强大的方式来管理事务,通过使用注解式事务,可以在方法级别上进行声明和配置事务的行为。这块面试官问的更多,我们来详细介绍下:

@Transactional注解(核心注解): @Transactional是Spring中最常用的注解之一,用于标识需要进行事务管理的方法或类。它可以应用在方法上或类上,而且还可以配置这些属性:

  1. value:指定事务管理器的名称(如果有多个事务管理器)。
  2. propagation:指定事务传播行为,默认值为REQUIRED。
  3. isolation:指定事务隔离级别,默认值为DEFAULT
  4. readOnly:指定事务是否为只读事务,默认值为false。
  5. timeout:指定事务超时时间,默认值为-1,表示不设置超时。

Spring的两种事务管理机制,面试这样答当场入职!,秋招总结&amp;小白入坑Java,spring,面试,事务,dubbo,原力计划

事务传播行为

上面介绍了Spring实现事务的两种方式,接下来介绍下另一个重量级的知识点–》事务传播行为。

事务传播行为定义了当一个事务方法调用另一个事务方法时,如何处理事务的范围。Spring提供了多种传播行为选项,包括:

  1. REQUIRED:如果当前没有事务,则创建一个新的事务;如果已存在事务,则加入到当前事务中。
  2. REQUIRES_NEW:每次都会创建一个新的事务,如果已存在事务则将其挂起。
  3. SUPPORTS:如果当前存在事务,则加入到当前事务中;如果没有事务,则以非事务方式执行。
  4. NOT_SUPPORTED:以非事务方式执行方法,如果当前存在事务则将其挂起。
  5. NEVER:以非事务方式执行方法,如果当前存在事务则抛出异常。
  6. MANDATORY:如果当前存在事务,则加入到当前事务中;如果没有事务,则抛出异常。
  7. NESTED:如果当前存在事务,则将该事务嵌套到当前事务中作为一个保存点,可以回滚到该保存点。

Spring的两种事务管理机制,面试这样答当场入职!,秋招总结&amp;小白入坑Java,spring,面试,事务,dubbo,原力计划

事务隔离级别

接下来介绍下 spring的事务隔离级别,这一块也是面试官经常问到的一点。它与数据库的事务隔离级别有着异曲同工之妙。

事务隔离级别定义了多个事务同时运行时彼此之间的可见性和影响范围。Spring支持以下事务隔离级别:

  • DEFAULT:使用数据库默认的事务隔离级别。
  • READ_UNCOMMITTED:最低级别的隔离级别,允许读取未提交的数据。
  • READ_COMMITTED:允许读取已提交的数据。
  • REPEATABLE_READ:对同一数据的多次读取结果保持一致,避免脏读和不可重复读。
  • SERIALIZABLE:最高级别的隔离级别,确保事务串行执行,避免任何并发问题。
  • 只读事务(readOnly): 如果一个事务中的方法仅执行读操作而不进行写操作时,可以将事务标记为只读事务。这样做可以提高性能,因为只读事务不需要对数据进行锁定。

Spring的两种事务管理机制,面试这样答当场入职!,秋招总结&amp;小白入坑Java,spring,面试,事务,dubbo,原力计划

学生管理系统demo

如果上面的概念看着有点懵,那么接下来让我们通过一个学生管理系统的demo来详细介绍 Spring 的声明式事务和基于注解的事务管理。

我从项目中扒出来部分伪代码,现在我们有一个简单的学生管理系统,其中包含两个服务方法:addStudent()updateStudent()。addStudent() 方法用于添加学生信息,updateStudent() 方法用于更新学生信息。

使用声明式事务管理demo

前面概念部分提到过,在声明式事务管理中,我们可以使用 XML 配置来定义事务边界和事务特性。

首先,我们需要配置事务管理器和数据源。在 Spring 配置文件中,我们可以使用 TransactionManager 元素和 DataSource 元素来配置相应的 Bean。

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <!-- 数据源配置 -->
</bean>

接下来,定义事务边界,我们可以在服务类中使用 :


<bean id="studentService" class="com.test.StudentService">
    <!-- 依赖注入 -->
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="add*" propagation="REQUIRED" />
        <tx:method name="update*" propagation="REQUIRED" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="studentServicePointcut" expression="execution(* com.example.StudentService.*(..))" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="studentServicePointcut" />
</aop:config>

在上面的代码中,我们使用了 <tx:advice> 元素来配置事务边界。通过 <tx:method> 元素,我们可以指定需要进行事务管理的方法并定义事务传播行为。

最后,在 Spring 配置文件中,我们需要启用事务管理功能并配置事务通知。

<tx:annotation-driven transaction-manager="transactionManager" />

我们配置了以上代码,因此Spring 会自动扫描带有 @Transactional 注解的方法,并生成事务通知。

使用注解的事务管理demo

首先第一步也是配置事务管理器和数据源,这一步与声明式事务管理相同,因此不在赘述。

接着定义事务边界,这点与声明式事务管理相比,基于注解的事务管理不再需要在 Spring 配置文件中进行额外的配置。我们只需在服务类中使用 @Transactional 注解即可。

@Service
public class StudentService {
    // ...

    @Transactional
    public void addStudent(Student student) {
        // 添加学生信息,管理系统伪代码省略
    }

    @Transactional
    public void updateStudent(Student student) {
        // 更新学生信息,管理系统伪代码省略
    }

    // ...
}

通过添加 @Transactional 注解到服务类中的方法上,我们直接就实现了对 addStudent() 和 updateStudent() 方法的事务管理。

同时,我们也可以将 @Transactional 注解应用到接口定义或抽象类的方法上,以便在子类中继承和覆盖时继续享受事务管理功能。

面试这样答

声明式事务管理和基于注解的事务管理是 Spring 提供的两种常用事务管理方式。它们都能够简化事务管理的配置和编写,并提供了灵活的事务特性。

在声明式事务管理中,我们使用 XML 配置或注解来定义事务边界和事务通知。通过使用 <tx:advice> 元素和 <tx:method> 元素,我们可以指定需要进行事务管理的方法并定义事务传播行为。

而基于注解的事务管理更加简洁,只需在服务类的方法上添加 @Transactional 注解即可实现事务管理。

无论是哪种方式,Spring 的事务管理机制都使得我们能够轻松实现数据的一致性和完整性。通过合理配置事务特性,我们可以满足不同业务场景下的事务需求。

文章到这里就先结束了,感兴趣的可以订阅专栏哈,后续会继续分享相关的知识点。

Spring的两种事务管理机制,面试这样答当场入职!,秋招总结&amp;小白入坑Java,spring,面试,事务,dubbo,原力计划文章来源地址https://www.toymoban.com/news/detail-583620.html

到了这里,关于Spring的两种事务管理机制,面试这样答当场入职!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PostgreSQL 的事务管理和并发控制机制解析

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月15日
    浏览(30)
  • MyBatis第十一讲:MyBatis事务管理机制详解

    本文是MyBatis第十一讲,主要介绍MyBatis事务管理相关的使用和机制。

    2024年02月16日
    浏览(28)
  • Spring 事务管理方案和事务管理器及事务控制的API

    目录 一、事务管理方案 1. 修改业务层代码 2. 测试 二、事务管理器 1. 简介 2. 在配置文件中引入约束 3. 进行事务配置 三、事务控制的API 1. PlatformTransactionManager接口 2. TransactionDefinition接口 3. TransactionStatus接口 往期专栏文章相关导读  1. Maven系列专栏文章 2. Mybatis系列专栏文

    2024年02月08日
    浏览(32)
  • 【Spring】Spring的事务管理

    Spring的事务管理简化了传统的事务管理流程,并且在一定程度上减少了开发者的工作量。 1.1 事务管理的核心接口 在Spring的所有JAR包中包含一个名为Spring-tx-4.3.6.RELEASE的JAR包,该包就是Spring提供的用于事务管理的依赖包。在该JAR包的org.Springframework.transaction包中有3个接口文件:

    2024年02月03日
    浏览(86)
  • Spring 事务管理

    目录 1. 事务管理 1.1. Spring框架的事务支持模型的优势 1.1.1. 全局事务 1.1.2. 本地事务 1.1.3. Spring框架的一致化编程模型 1.2. 了解Spring框架的事务抽象(Transaction Abstraction) 1.2.1. Hibernate 事务设置 1.3. 用事务同步资源 1.3.1. 高级同步方式 1.3.2. 低级同步方式 1.3.3.TransactionAwareDataSo

    2024年02月13日
    浏览(36)
  • Spring的事务管理

    1、事务的回顾 【1】事务的定义 是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合 【2】事务的ACID原则 事务具有4个基本特性:原子性、一致性

    2023年04月16日
    浏览(70)
  • Spring之事务管理

    事务是数据库操作最基本单位,要么都成功,要么都失败。 原子性 一致性 隔离性 持久性。 Spring定义了7种传播行为: 传播属性 描述 REQUIRED 如果有事务在运行,当前的方法就在这个事务内运行,否则,就启动一个新的事务,并在自己的事务内运行 REQUIRED_NEW 当前的方法必须

    2024年02月13日
    浏览(59)
  • Spring使用@Transactional 管理事务,Java事务详解。

    B站视频:https://www.bilibili.com/video/BV1eV411u7cg 技术文档:https://d9bp4nr5ye.feishu.cn/wiki/HX50wdHFyiFoLrkfEAAcTBdinvh 简单来说事务就是一组对数据库的操作 要么都成功,要么都失败。 事务要保证可靠性,必须具备四个特性:ACID。 A:原子性:事务是一个原子操作单元,要么完全执行,要么

    2024年02月11日
    浏览(24)
  • Spring中的事务管理

    概念 事务 是一组操作的集合,它是一个不可分割的工作单位,这些操作要么 同时成功 ,要么 同时失败 。 操作 开启事务(一组操作 开始前 ,开启事务) : start transaction / begin ; 提交事务(这组操作 全部成功后 ,提交事务) : commit ; 回滚事务(中间任何一个操作 出现异常 ,

    2024年02月12日
    浏览(26)
  • 【Spring教程21】Spring框架实战:Spring事务简介、AOP事务管理、代码示例全面详解

    欢迎大家回到《Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文的上一篇为《AOP(面对切面编程)知识总结》 事务作用:在数据层保障一系列的数据库

    2024年02月04日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包