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

简介: Spring事务传播属性和隔离级别🍅程序员小王的博客:程序员小王的博客🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕🍅java自学的学习路线:java自学的学习路线

一、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操作
    }
}

0.png


2、七个事务传播属性

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


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


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


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

1.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: 读未提交

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


3.png



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

  • read_ommited:oracle默认隔离级别
  • 解析:不同客户端之间可以在一次事务中读取到其他客户端已经提交的事务

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

  • 单词:repeatable:[rɪˈpi:təbl] 可重复的
  • repeatable_read:mysql默认隔离级别
  • 解析:在一次事务中一方更新,导致两次查询结果不一致这种情况叫不可重复读

4.png


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

  • 幻影读概念:在一次事务中一方插入,导致两次查询结果不一致这种情况叫幻影读
  • 解析:一个客户端在一次事务中多次读取一张表的数据 结果一致

image.png


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


三、读写和异常性

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

true:只读

false:不是只读【默认值】

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

 

2、回滚性(rollback-for && no-rollback-for="")rollback-for: 遇到什么类异常回滚

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

<tx:method name="save*" rollback-for="" no-rollback-for="" propagation="REQUIRES_N

 

3、timeout 超时性

timeout: -1 永不超时


5.png

相关文章
|
17天前
|
存储 Java 数据安全/隐私保护
|
19天前
|
Java 数据库 开发者
|
4天前
|
SQL Java 关系型数据库
Spring 事务
Spring 事务
7 1
|
6天前
|
XML Java 数据格式
Spring 属性注入方式
Spring 属性注入方式
13 2
|
6天前
|
Java 数据库连接 数据库
Spring事务简介,事务角色,事务属性
Spring事务简介,事务角色,事务属性
16 2
|
7天前
|
Java Apache Spring
Spring BeanUtils与Apache BeanUtils提供基本属性复制,适用于简单需求
Spring BeanUtils与Apache BeanUtils提供基本属性复制,适用于简单需求;Cglib BeanCopier用于转换为Cglib代理对象;Apache PropertyUtils处理属性操作;Dozer支持复杂对象映射。选择工具取决于具体需求,如需精细控制或对象映射,推荐Dozer或Apache PropertyUtils。Apache BeanUtils可能因潜在的封装性破坏被禁用。
20 3
|
10天前
|
Java 数据库连接 数据库
16:事务-Java Spring
16:事务-Java Spring
26 5
|
12天前
|
消息中间件 Java 关系型数据库
Spring事务与分布式事务
这篇文档介绍了事务的概念和数据库事务的ACID特性:原子性、一致性、隔离性和持久性。在并发环境下,事务可能出现更新丢失、脏读和不可重复读等问题,这些问题通过设置事务隔离级别(如读未提交、读已提交、可重复读和序列化)来解决。Spring事务传播行为有七种模式,影响嵌套事务的执行方式。`@Transactional`注解用于管理事务,其属性包括传播行为、隔离级别、超时和只读等。最后提到了分布式事务,分为跨库和跨服务两种情况,跨服务的分布式事务通常通过最终一致性策略,如消息队列实现。
|
13天前
|
监控 Java 测试技术
Spring Boot与事务钩子函数:概念与实战
【4月更文挑战第29天】在复杂的业务逻辑中,事务管理是确保数据一致性和完整性的关键。Spring Boot提供了强大的事务管理机制,其中事务钩子函数(Transaction Hooks)允许开发者在事务的不同阶段插入自定义逻辑。本篇博客将详细探讨事务钩子函数的概念及其在Spring Boot中的应用。
35 1
|
14天前
|
Java 开发者 Spring
Spring Boot中的资源文件属性配置
【4月更文挑战第28天】在Spring Boot应用程序中,配置文件是管理应用程序行为的重要组成部分。资源文件属性配置允许开发者在不重新编译代码的情况下,对应用程序进行灵活地配置和调整。本篇博客将介绍Spring Boot中资源文件属性配置的基本概念,并通过实际示例展示如何利用这一功能。
23 1