Java 杂谈

Spring Boot之事务管理

2019-05-27  本文已影响0人  WinkTink

一. 什么是事务?

        我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合。由于数据操作在顺序执行的过程中,任何一步操作都有可能发生异常,异常会导致后续操作无法完成,此时由于业务逻辑并未正确的完成,之前成功操作数据的并不可靠,需要在这种情况下进行回退。

        事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就回退到事务开始未进行操作的状态。

        事务管理是Spring框架中最为常用的功能之一,我们在使用Spring Boot开发应用时,大部分情况下也都需要使用事务。

二. 快速入门?

        在Spring Boot中,当我们使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖的时候,框 架会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager。所以我们不需要任何额外 配置就可以用@Transactional注解进行事务的使用。

三.  传播行为

        事务的第一个方面是传播行为(propagation behavior)。当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。Spring定义了七种传播行为:

3.1  PROPAGATION_REQUIRED (required , 必须   默认值)

        A如果有事务,B将使用该事务;

        如果A没有事务,B将创建一个新的事务。

3.2  PROPAGATION_SUPPORTS(supports ,支持)

        A如果有事务,B将使用该事务;

        如果A没有事务,B将以非事务执行。

3.3  PROPAGATION_MANDATORY(mandatory ,强制)

        A如果有事务,B将使用该事务;

        如果A没有事务,B将抛异常。

3.4  PROPAGATION_REQUIRES_NEW (requires_new,必须新的)

        如果A有事务,将A的事务挂起,B创建一个新的事务;    

        如果A没有事务,B创建一个新的事务。

3.5  PROPAGATION_NOT_SUPPORTED (not_supported ,不支持)

        如果A有事务,将A的事务挂起,B将以非事务执行;

        如果A没有事务,B将以非事务执行。

3.6  PROPAGATION_NEVER (never,从不)

        如果A有事务,B将抛异常;

        如果A没有事务,B将以非事务执行。

3.7  PROPAGATION_NESTED (nested ,嵌套)

        A和B底层采用保存点机制,形成嵌套事务。

       外层事务的回滚可以引起内层事务的回滚。而内层事务的异常并不会导致外层事务的回滚,它是一个真正的嵌套事务。

四. 隔离级别

上一篇下一篇

猜你喜欢

热点阅读