[笔记]事务简介-springboot

这篇具有很好参考价值的文章主要介绍了[笔记]事务简介-springboot。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Spring Boot中,事务的管理通常通过注解来实现,使得配置变得简单而直观。这种方式与Spring Boot的设计理念一致,即减少显式配置,增加自动配置。以下是如何在Spring Boot项目中应用和管理事务的详细说明:


Spring Boot中的事务管理

  1. Spring Boot事务基础

Spring Boot沿用了Spring的事务管理概念,但在配置和使用上更为简化,主要依赖于注解来管理事务。

1.1. Spring Boot事务特性

与传统的Spring事务管理相同,Spring Boot事务也遵循ACID原则:

  1. 原子性(Atomicity)

  2. 一致性(Consistency

  3. 隔离性(Isolation)

  4. 持久性(Durability)

1.2. 事务的隔离级别和传播行为

Spring Boot支持相同的事务隔离级别和传播行为,如:

  • 隔离级别:READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE。

  • 传播行为:REQUIRED、REQUIRES_NEW、SUPPORTS等。

  1. Spring Boot中的声明式事务

2.1. 开启事务支持

在Spring Boot中,通常通过添加@EnableTransactionManagement注解在配置类上启用事务管理,但在Spring Boot中这通常是不必要的,因为Spring Boot的自动配置已经包含了事务管理的支持。

2.2. 使用@Transactional注解
  • @Transactional:这是控制事务的主要注解。它可以应用于类或方法上。当应用于类上时,该类的所有公共方法将成为事务方法。

  • 属性配置:可以配置如下属性:

    • propagation:定义事务的传播行为。

    • isolation:定义事务的隔离级别。

    • timeout:定义事务的超时时间。

    • readOnly:标记事务是否为只读。

    • rollbackFor:定义哪些异常类型会触发事务回滚。

    • noRollbackFor:定义哪些异常类型不会触发事务回滚。

  1. 示例代码

3.1. Service层事务应用
@Service
public class UserServiceImpl implements UserService {

    @Transactional(rollbackFor = Exception.class)
    public void createUser(User user) {
        // 方法实现
    }

    @Transactional(readOnly = true)
    public User getUserById(Long id) {
        // 方法实现
    }
}

在这个例子中,createUser方法上的@Transactional注解指定了在发生任何Exception时回滚事务。而getUserById方法则是一个只读事务,这对于提高查询操作的效率是有帮助的。

3.2. 自定义事务管理器

如果您需要自定义事务管理器,可以在配置类中定义:

@Configuration
public class TransactionConfig {

    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

在大多数情况下,您不需要这样做,因为Spring Boot会为您自动配置事务管理器。

  1. 事务不生效的情况

同样地,在Spring Boot中,如果在同一个类中,一个没有使用事务的方法调用了一个使用了事务的方法,事务是不会生效的。这是因为事务的应用需要通过代理来实现,而直接的方法调用不会经过代理。

此外,对于声明式事务,Spring默认只对运行时异常进行回滚。如果需要对检查型异常进行回滚,可以通过@Transactional注解的rollbackFor属性来指定。


以上就是在Spring Boot项目中关于事务管理的主要内容。Spring Boot使得事务管理变得更加

简单,减少了大量的配置工作,同时保留了Spring事务管理的灵活性和强大功能。

传播行为

传播行为是指在事务环境中,方法之间相互调用时事务如何传播。例如,当一个事务方法被另一个事务方法调用时,是否要加入已存在的事务,或者创建一个新的事务等。

在Spring和Spring Boot中,有几种不同的传播行为,例如REQUIRED(如果当前存在事务,就加入该事务;如果没有,则创建一个新的事务)和REQUIRES_NEW(总是创建一个新的事务)等。了解和合理使用这些传播行为对于设计正确的事务策略是非常重要的。

this. 调用和事务失效问题

在Spring和Spring Boot中,事务是通过AOP代理实现的。当在同一个类中,一个非事务方法内部调用了一个事务方法时,这种this.的调用方式将直接调用方法,而不会通过代理,导致事务处理失效。

解决这个问题的一种方法是使用Spring的自我注入。即在类内部使用@Autowired@Resource将自己注入进来,然后通过这个注入的实例调用事务方法,以确保通过代理:

@Service
public class MyService {

    @Autowired
    private MyService myService; // 自我注入

    public void nonTransactionalMethod() {
        myService.transactionalMethod(); // 通过代理调用
    }

    @Transactional
    public void transactionalMethod() {
        // 事务处理
    }
}

抛出非运行时异常导致的事务不回滚

在Spring的声明式事务管理中,默认情况下,只有在抛出运行时异常(继承自RuntimeException)和错误(Error)时,事务才会回滚。如果需要让检查型异常(即非运行时异常,如SQLException)也触发事务回滚,可以通过@Transactional注解的rollbackFor属性来实现:

@Transactional(rollbackFor = Exception.class)
public void someTransactionalMethod() {
    // 业务逻辑
}

在这里,将rollbackFor属性设置为Exception.class意味着所有类型的异常,包括非运行时异常,都会触发事务回滚。文章来源地址https://www.toymoban.com/news/detail-824444.html

到了这里,关于[笔记]事务简介-springboot的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 在 Spring Boot 中使用事务

    当调用使用 @Transactional 注解的方法时,Spring Boot利用事务管理器来创建或加入事务。事务管理器监视事务的生命周期,根据操作结果进行提交或回滚。 Spring Boot支持各种事务隔离级别,包括READ_UNCOMMITTED(读取未提交的数据)、READ_COMMITTED(读取已提交的数据)、REPEATABLE_READ(

    2024年01月25日
    浏览(35)
  • spring boot 整合jdbc和事务

    目录 1、j在pom文件中引入dbc驱动与mybatis  2、数据库连接池参数配置 3、mybatis配置 4、application配置 5、通用mapper配置 6、编写UserMapper 7、user表(需要自行去mysql创建数据库表新增用户数据,sql语句见下一步) 8、sql信息 9、UserService编写 10、测试结果 11、测试输出结果 访问效果

    2024年02月15日
    浏览(39)
  • Spring Boot 中的事务超时时间

    在 Spring Boot 中,事务管理是一个非常重要的话题。当我们在数据库中执行一些复杂的操作时,需要确保这些操作能够在一定的时间内完成,否则可能会导致数据一致性问题。为了解决这个问题,Spring Boot 提供了事务超时时间的设置。 事务超时时间是指一个事务在执行中最长

    2024年02月07日
    浏览(42)
  • 【Spring Boot】事务的隔离级别与事务的传播特性详解:如何在 Spring 中使用事务?不同隔离级别的区别?

    事务这个词在学习 MySQL 和多线程并发编程的时候,想必大家或多或少接触过。 那么什么是事务呢? 事务是指一组操作作为一个不可分割的执行单元,要么全部成功执行,要么全部失败回滚。在数据库中,事务可以保证数据的一致性、完整性和稳定性,同时避免了数据的异常

    2024年02月13日
    浏览(43)
  • Spring Boot原理分析(四):声明式事务

    Spring 提供了多种管理事务的方式,包括编程式事务管理和声明式事务管理两种方式。下面分别介绍这两种方式及其实现方式: 编程式事务管理是通过编写代码来手动管理事务。它需要在事务的开始和结束时,通过编程方式来控制事务的提交和回滚。Spring 提供了 PlatformTransa

    2024年02月17日
    浏览(49)
  • Spring Boot 中的 Seata 分布式事务

    在分布式系统中,保证数据的一致性是一个非常重要的问题。传统的 ACID 事务模型虽然能够保证单个数据库的数据一致性,但是在分布式系统中却很难实现。因此,近年来出现了一些新的事务模型,其中 Seata 就是一种比较流行的模型。 在本文中,我们将介绍 Spring Boot 中的

    2024年02月09日
    浏览(35)
  • Java企业级开发学习笔记(4.4)Spring Boot加载自定义配置文件

    创建 Spring Boot 项目 单击【创建】按钮 在 resources 里创建 myconfig.properties 文件 设置文件编码 设置学生的四个属性值 在 cn.kox.boot 包里创建config子包,在子包里创建 StudentConfig 打开自带的测试类 ConfigDemo01ApplicationTests 注入学生配置实体,创建 testStudentConfig() 测试方法,在里面输

    2024年02月08日
    浏览(48)
  • Spring Boot多数据源事务@DSTransactional的使用

    Spring Boot 集成com.baomidou,引入dynamic-datasource依赖,实现多数据源,这里说下事务问题: 1、一个方法中使用同一个数据源; 2、一个方法中使用了多个数据源; 这里把dao、service列出来 1、dao层   2、service层  spring boot实现多数据源:Spring Boot集成Druid实现多数据源的两种方式_涛

    2024年02月11日
    浏览(45)
  • Spring boot 事务无效,报错:Transaction not enabled

    使用spring boot + mybatis plus时添加的事务不生效,并且有些方法操作会出现如下异常: 追踪SqlHelper类,找到报错的位置,如下: 可以看到只有批量插入才会报错,单条插入不报错。报错是因为得不到事务标识,猜测可能是事务注解没生效。 查找spring boot的事务使用方式,大多数

    2024年02月11日
    浏览(43)
  • Spring Boot 多数据源及事务解决方案

    一个主库和N个应用库的数据源,并且会同时操作主库和应用库的数据,需要解决以下两个问题: 如何动态管理多个数据源以及切换? 如何保证多数据源场景下的数据一致性(事务)? 本文主要探讨这两个问题的解决方案,希望能对读者有一定的启发。 通过扩展Spring提供的抽象

    2024年02月10日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包