zoukankan      html  css  js  c++  java
  • Spring的事务初见

    一、事务的特性

    • 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
    • 一致性: 执行事务前后,数据保持一致;
    • 隔离性: 并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的;
    • 持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
    二、spring事务管理接口
    • PlatformTransactionManager: (平台)事务管理器
    • TransactionDefinition: 事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则)
    • TransactionStatus: 事务运行状态

    所谓事务管理,其实就是“按照给定的事务规则来执行提交或者回滚操作”。

    三、PlatformTransactionManager接口介绍
        Spring框架支持事务管理的核心是事务管理器抽象,对于不同的数据访问框架(如Hibernate)通过实现策略接口PlatformTransactionManager,从而能支持各种数据访问框架的事务管理。
        PlatformTransactionManager接口定义如下:
    1 public interface PlatformTransactionManager {
    2        TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
    3        void commit(TransactionStatus status) throws TransactionException;
    4        void rollback(TransactionStatus status) throws TransactionException;
    5 }
    • getTransaction()返回一个已经激活的事务或创建一个新的事务(根据给定的TransactionDefinition类型参数定义的事务属性),返回的是TransactionStatus对象代表了当前事务的状态,其中该方法抛出TransactionException(未检查异常)表示事务由于某种原因失败。
    • commit()用于提交事务.
    • rollback()用于回滚事务

    四、TransactionDefinition接口定义如下

    public interface TransactionDefinition {
           int getPropagationBehavior();
           int getIsolationLevel();
           int getTimeout();
           boolean isReadOnly();
           String getName();
    }
    • getPropagationBehavior()返回定义的事务传播行为;
    • getIsolationLevel()返回定义的事务隔离级别;
    • getTimeout()返回定义的事务超时时间;
    • isReadOnly()返回定义的事务是否是只读的;
    • getName()返回定义的事务名字。

    五、TransactionStatus接口定义如下

    public interface TransactionStatus extends SavepointManager {
           boolean isNewTransaction();
           boolean hasSavepoint();
           void setRollbackOnly();
           boolean isRollbackOnly();
           void flush();
           boolean isCompleted();
    }
    • isNewTransaction():返回当前事务状态是否是新事务
    • hasSavepoint():返回当前事务是否有保存点
    • setRollbackOnly()设置当前事务应该回滚;
    • isRollbackOnly(()返回当前事务是否应该回滚;
    • flush()用于刷新底层会话中的修改到数据库,一般用于刷新如Hibernate/JPA的会话,可能对如JDBC类型的事务无任何影响;
    • isCompleted():当前事务否已经完成。
  • 相关阅读:
    Leetcode-2 两数相加
    离散数学-基本割集的找法
    Linux操作系统分析课程学习总结报告
    Linux实验三 结合中断上下文切换和进程上下文切换分析Linux内核一般执行过程
    Linux实验二:深入理解系统调用
    初始python
    水仙花数讲解
    Python-运算
    Python-列表
    Python-字符串
  • 原文地址:https://www.cnblogs.com/qunan/p/9468763.html
Copyright © 2011-2022 走看看