暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Spring事物管理

帽爹的技术轮子 2020-09-17
170
01

事物的特征
  • Atomic:原子性,事务必须是一个原子的工作单元,要么全部成功,要么全部失败

  • Consistent:一致性,事务完成时必须使所有的数据保持一致状态

  • Isolation:隔离性,并发事务所做的修改必须与其他事务所做的修改是隔离的

  • Duration:持久性,事务完成后对系统的影响是永久性的


02

Spring框架的事务支持模型的优点

站在事物管理角度,可分为以下两种:

  1. 全局事物(分布式事物)JTA

  2. 本地事物
    不用事物的编程框架来管理事物,直接使用资源管理器来控制事物。典型的就是java.sql.Connection中的setAutoCommit、commit、rollback方法
    本地事物有以下几种优点:

    • 支持严格的ACID属性

    • 可靠

    • 高效

    • 状态可以只在资源管理器中维护

    • 应用编程模型简单

    本地事物的局限性

    • 不具备分布式事物处理能力(不能跨多个事物资源工作)

    • 本地事物对编程模型具有侵入性


03

Spring事物定义两种方式
  • 声明式事物的实现(AOP)

    • @Transactional

    • xml配置切面



  • 编程式事物

    • 使用TransactionTemplate或TransactionalOperator

    • 直接实现TransactionManager


通常在少量事物操作的情况下,编程式事物管理通常是一个好注意。如果存在大量的事物操作声明式事物是一个更好的选择


04

Spring事物定义(TransactionDefinition)特性
  • 传播性(Propagation)

PropagationDescription
REQUIRED支持当前事务,假设当前没有事务。就新建一个事务
REQUIRES_NEW新建事务,假设当前存在事务。把当前事务挂起
SUPPORTS支持当前事务,假设当前没有事务,就以非事务方式运行
NOT_SUPPORTED以非事务方式运行操作。假设当前存在事务,就把当前事务挂起
MANDATORY支持当前事务,假设当前没有事务,就抛出异常
NEVER以非事务方式运行,假设当前存在事务,则抛出异常
NESTED

如果当前存在事务,则在嵌套事务内执行。如果当前没有事务

则进行与PROPAGATION_REQUIRED类似的操作;有个savepoint,外层事物会把嵌套事物一起回滚,而嵌套事物回滚不会影响外层事物

  • 隔离性(Isolation)

IsolationDescription
DEFAULT

DEFAULT 这是一个PlatformTransactionManager默认的隔离级别,

使用数据库默认的事务隔离级别

READ_UNCOMMITED未提交读(read uncommited) :脏读,不可重复读,虚读都有可能发生
READ_COMMITED已提交读 (read commited):避免脏读。但是不可重复读和虚读有可能发生
REPEATABLE_READ可重复读 (repeatable read) :避免脏读和不可重复读.但是虚读有可能发生
SERIALIZABLE串行化的 (serializable) :避免以上所有读问题
  • 超时(Timeout)

    设置事物执行超时时间

public static void DateSourceUtils#applyTimeout(...) {
   Statement#setQueryTimeout(timeout);
}

  • 只读(Read-only status)


05

Spring事物状态(TransactionStatus)

TransactionStatus接口为事务代码提供了一种简单的方法来控制事务执行和查询事务状态,TransactionStatus接口清单:

public interface TransactionStatus extends TransactionExecutionSavepointManagerFlushable {

    @Override
    boolean isNewTransaction();

    boolean hasSavepoint();

    @Override
    void setRollbackOnly();

    @Override
    boolean isRollbackOnly();

    void flush();

    @Override
    boolean isCompleted();
}


05

Spring事物管理器

TransactionManager事物管理器主要分为:

  • PlatformTransactionManager

  • ReactiveTransactionManager

/**
 * 具体事物管理器实现,如JPA、JDBC、Hibernate、JMS等
 */

public interface PlatformTransactionManager extends TransactionManager {
    /**
     * 获取事物状态
     */

    TransactionStatus getTransaction(@Nullable TransactionDefinition definition)
            throws TransactionException
;

    /**
     * 提交
     */

    void commit(TransactionStatus status) throws TransactionException;

    /**
     * 回滚
     */

    void rollback(TransactionStatus status) throws TransactionException;
}


文章转载自帽爹的技术轮子,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论