栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring事务梳理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring事务梳理

一、事务概念

事务是恢复和并发控制的基本单位。

在企业级软件开发中,事务管理是必不可少的的一项技术,以保证数据的完整性和一致性。


事务具有如下特性:(ACID)

A :Atomic 原子性。要么全部完成,要么全部失败。

C :Consistency 一致性。业务上下流一致,不会存在上流成功,下流失败。

I :Isolation 隔离性。不同事务间相互隔离。

D :Durability 持久性。事务一旦完成,结果便是固定了,无论系统发生任何错误。


二、Spring事务 2.1 Spring事务管理器

Spring事务管理是由实现接口org.springframework.transaction.PlatformTransactionManager的类进行事务管理的。

Spring为各个平台提供了对应的事务管理器,如:DataSourceTransactionManager(JDBC事务管理)、JpaTransactionManager(JPA事务管理器)、HibernateTransactionManager等等。


public interface PlatformTransactionManager {
    TransactionStatus getTransaction(TransactionDefinition var1) throws TransactionException;

    void commit(TransactionStatus var1) throws TransactionException;

    void rollback(TransactionStatus var1) throws TransactionException;
}
2.1.1 事务属性定义TransactionDefinition

PlatformTransactionManager通过getTransaction(TransactionDefinition definition)方法来得到事务,入参为TransactionDefinition,该类具体代码如下:

public interface TransactionDefinition {
    //事务传播行为
    int PROPAGATION_REQUIRED = 0;
    int PROPAGATION_SUPPORTS = 1;
    int PROPAGATION_MANDATORY = 2;
    int PROPAGATION_REQUIRES_NEW = 3;
    int PROPAGATION_NOT_SUPPORTED = 4;
    int PROPAGATION_NEVER = 5;
    int PROPAGATION_NESTED = 6;
    //事务隔离级别
    int ISOLATION_DEFAULT = -1;
    int ISOLATION_READ_UNCOMMITTED = 1;
    int ISOLATION_READ_COMMITTED = 2;
    int ISOLATION_REPEATABLE_READ = 4;
    int ISOLATION_SERIALIZABLE = 8;
    int TIMEOUT_DEFAULT = -1;
    //获取事务传播行为
    int getPropagationBehavior();
    //获取事务隔离级别
    int getIsolationLevel();
    //事务超时时间
    int getTimeout();
    //是否只读
    boolean isReadOnly();
    //获取事务名称
    String getName();
}


2.1.2 事务传播行为PropagationBehavior

当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。

Spring定义七种事务传播行为:

传播行为含义
REQUIRED(需要)(Default)如果当前存在事务,则在当前事务运行,否则创建一个新的事务。
REQUIRES_NEW(需要新的)创建新的事务,如果当前存在事务,挂起当前存在的事务。
SUPPORTS(支持)支持当前事务,如果当前事务不存在,则以非事务方式执行。
NOT_SUPPORTED(不支持)以非事务方式执行,如果当前事务存在,则挂起当前事务。
MANDATORY(强制)支持当前事务,如果当前事务不存在,则抛出异常。
NEVER(从不)以非事务方式执行,如果当前事务存在,则抛出异常。
NESTED(嵌套)如果当前事务存在,则在嵌套事务中执行,否则与REQUIRED一致。

2.1.3 事务隔离级别

事务隔离级别是为了处理若干个并发的事务之间的隔离程度。

Spring定义五种事务隔离级别:

隔离级别含义
DEFAULT(Default)使用底层数据库的默认隔离级别。
READ_UNCOMMITTED读未提交。可能发生脏读、不可重复读、幻读。
READ_COMMITTED读已提交。可能发生不可重复度、幻读。
REPEATABLE_READ可重复读。可能发生幻读。
SERIALIZABLE可串行化读。不会发生以上的问题,但性能降低。


脏读:读取到另一个事务回滚前的脏数据。不可重复读:发生在一个事务的查询中,读取到另一个事务的更新数据。幻读:幻读是不可重复读的一种特殊情况,侧重于增删的情况下。当一个事务(T1)读取几行记录后,另一个并发事务(T2)插入了一些记录时,幻影读就发生了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785948.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号