Spring事务传播属性和隔离级别

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Spring事务传播属性和隔离级别

Spring事务传播属性和隔离级别

一、Spring事务传播属性(propagation)

1、propagration(事务传播属性)产生场景:

Service可以调用一个或者多个Dao方法,但是在使用Spring之前我们只能调用dao层,但是不能调用另外一个Service层中的方法

案例:在UserService.java中有方法 save().其中嵌套AddressService.java中update()。当UserService事务发生rollback时, AddressService事务也可以rollback或是commit。


public class UserService {
    public void save() {
        UserService.update();//AddressService对象uodate操作
    }
}


image.png

2、七个事务传播属性

REQUIRED: 需要事务,外部存在事务融入当前事务,外部没有事务,开启新的事务 【增删改操作常用】


SUPPORTS: 支持事务,外部存在事务融入当前事务,外部没有事务,不开启新的事 【查询操作常用 】


REQUIRES_NEW: 每次开启新的事务,如果外部存在事务外部事务挂起(暂停),开启新的事务运行,运行结束后恢复外部事务 【日志,流水操作】


案例分析:转账业务操作:转账,Account,App都是业务层


image.png


NOT_SUPPORTED: 不支持事务,如果外部存在事务外部事务挂起,已非事务方式运行.


NEVER: 不支持事务,存在事务报错


MANDATORY: 强制事务没有事务报错


NESTED: 嵌套事务,数据库不支持


二、隔离级别isolation

isolation:[ˌaɪsəˈleɪʃn]

:隔离


1、事务特性(事务的基本要素)

事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功。其必须遵循四个原则(ACID )。


ACID指:原子性,一致性,隔离性 ,持久性

(1)原子性(Atomicity [ˌatəˈmɪsɪti]):

定义:指一个事务要么全部执行,要么不执行 ,也就是说一个事务不可能只执行了一半就停止了.

如:你从取款机取钱,这个事务可以分成两个步骤: 1划卡,2出钱.不可能划了卡,而钱却没出来.这两步必须同时完成.要么就不完成。


(2)一致性(Consistency[kənˈsɪstənsi]):

定义:在事务执行前数据库的数据处于正确的状态,而事务执行完成后数据库的数据还是应该处于正确的状态,即数据完整性约束没有被破坏;

如:银行转帐,A转帐给B,必须保证A的钱一定转给B,一定不会出现A的钱转了但B没收到,否则数据库的数据就处于不一致(不正确)的状态。


(3)隔离性(Isolation [ˌaɪsəˈleɪʃn]

定义:并发事务执行之间互不影响,在一个事务内部的操作对其他事务是不产生影响,这需要事务隔离级别来指定隔离性;

(4)持久性(Durability[ˌdʊrəˈbɪləti]

定义:事务一旦执行成功,它对数据库的数据的改变必须是永久的,不会因比如遇到系统故障或断电造成数据不一致或丢失。

2、隔离性(事务的隔离级别)

isolation :隔离级别 多个客户端间操作的隔离性【Client——>Service】


(1)DEFAULT: 采用数据库默认隔离级别(Spring提供的)

Spring框架提供的隔离级别,当前使用的数据库对应的默认隔离级别

(2)READ_UNCOMMITTED: 读未提交

解析:不同客户端之间可以在一次事务中读取到其他客户端没有提交的事务


image.pngimage.png



(3)READ_COMMITTED: 读提交 用来避免脏读现象出现的

read_ommited:oracle默认隔离级别

解析:不同客户端之间可以在一次事务中读取到其他客户端已经提交的事务

(4)REPEATABLE_READ: 可重复读主要是用来避免不可重复读现象出现的

单词:repeatable:[rɪˈpi:təbl] 可重复的

repeatable_read:mysql默认隔离级别

解析:在一次事务中一方更新,导致两次查询结果不一致这种情况叫不可重复读


image.png

(5)SERIALIZABLE : 序列化读 用来避免幻影读现象出现

幻影读概念:在一次事务中一方插入,导致两次查询结果不一致这种情况叫幻影读


解析:一个客户端在一次事务中多次读取一张表的数据 结果一致



image.png

隔离级别的特点:隔离级别从低到高,级离级别越高越安全, 但是锁的内容越高,效率越低


三、读写和异常性

1、read-only(只读性):设置当前方法是否只读

true:只读


false:不是只读【默认值】


  <tx:method name="save*" propagation="REQUIRES_NEW" read-only="true|false" isolation="SERIALIZABLE"/>

2、回滚性(rollback-for && no-rollback-for="")

rollback-for: 遇到什么类异常回滚


no-rollback-for: 遇到什么类异常不回滚


  <tx:method name="save*" rollback-for="" no-rollback-for="" propagation="REQUIRES_NEW" read-only="true" isolation="SERIALIZABLE"/>

3、timeout 超时性

timeout: -1 永不超时

image.png


相关文章
|
5月前
|
安全 Java 数据库
一天十道Java面试题----第四天(线程池复用的原理------>spring事务的实现方式原理以及隔离级别)
这篇文章是关于Java面试题的笔记,涵盖了线程池复用原理、Spring框架基础、AOP和IOC概念、Bean生命周期和作用域、单例Bean的线程安全性、Spring中使用的设计模式、以及Spring事务的实现方式和隔离级别等知识点。
|
5月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
1月前
|
Java 关系型数据库 数据库
京东面试:聊聊Spring事务?Spring事务的10种失效场景?加入型传播和嵌套型传播有什么区别?
45岁老架构师尼恩分享了Spring事务的核心知识点,包括事务的两种管理方式(编程式和声明式)、@Transactional注解的五大属性(transactionManager、propagation、isolation、timeout、readOnly、rollbackFor)、事务的七种传播行为、事务隔离级别及其与数据库隔离级别的关系,以及Spring事务的10种失效场景。尼恩还强调了面试中如何给出高质量答案,推荐阅读《尼恩Java面试宝典PDF》以提升面试表现。更多技术资料可在公众号【技术自由圈】获取。
|
2月前
|
Java 开发者 Spring
Spring高手之路24——事务类型及传播行为实战指南
本篇文章深入探讨了Spring中的事务管理,特别是事务传播行为(如REQUIRES_NEW和NESTED)的应用与区别。通过详实的示例和优化的时序图,全面解析如何在实际项目中使用这些高级事务控制技巧,以提升开发者的Spring事务管理能力。
61 1
Spring高手之路24——事务类型及传播行为实战指南
|
6月前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。
|
7月前
|
XML druid Java
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
75 0
|
5月前
|
Java Spring 开发者
Spring 框架配置属性绑定大比拼:@Value 与 @ConfigurationProperties,谁才是真正的王者?
【8月更文挑战第31天】Spring 框架提供 `@Value` 和 `@ConfigurationProperties` 两种配置属性绑定方式。`@Value` 简单直接,适用于简单场景,但处理复杂配置时略显不足。`@ConfigurationProperties` 则以类级别绑定配置,简化代码并更好组织配置信息。本文通过示例对比两者特点,帮助开发者根据具体需求选择合适的绑定方式,实现高效且易维护的配置管理。
76 0
|
5月前
|
缓存 Java 数据库连接
Spring Boot 资源文件属性配置,紧跟技术热点,为你的应用注入灵动活力!
【8月更文挑战第29天】在Spring Boot开发中,资源文件属性配置至关重要,它让开发者能灵活定制应用行为而不改动代码,极大提升了可维护性和扩展性。Spring Boot支持多种配置文件类型,如`application.properties`和`application.yml`,分别位于项目的resources目录下。`.properties`文件采用键值对形式,而`yml`文件则具有更清晰的层次结构,适合复杂配置。此外,Spring Boot还支持占位符引用和其他外部来源的属性值,便于不同环境下覆盖默认配置。通过合理配置,应用能快速适应各种环境与需求变化。
57 0
|
8月前
|
监控 Java 数据库
Spring事务相关配置、案例:转账业务追加日志及事务传播行为
Spring事务相关配置、案例:转账业务追加日志及事务传播行为
87 0
|
存储 Java 数据库
Spring事务和事务传播机制
Spring事务和事务传播机制
101 0