Spring事务

作者: 往事随风_0817 | 来源:发表于2019-02-14 23:40 被阅读0次

    容器事务

    Spring事务核心接口

    5c5ef4e30e946
    • JDBC事务管理器(DataSourceTransactionManager):本事务管理器是通过调用java.sql.Connection来管理事务.
    • Hibernate事务管理器(HibernateTransactionManager):本管理器将事务管理的职责委托给org.hibernate.Transaction对象来管理事务,而后者是从HibernateSession中获取到的
    • JPA事务管理器(JpaTransactionManager):通过一个JPA实体管理工厂(javax.persistence.EntityManagerFactory接口的任意实现)将与由工厂所产生的JPA EntityManager合作来构建事务
    • JTA事务管理器(JtaTransactionManager):本管理器将事务管理的责任委托给javax.transaction.UserTransaction和javax.transaction.TransactionManager对象进行事务处理

    数据读取类型说明

    • 脏读

    事务没提交,提前读取

    • 不可重复读

    两次读取的数据不一致

    • 幻读

    事务不是独立执行时发生的一种非预期现象

    Spring事务属性定义

    Spring事务属性是通过org.springframework.transaction.TransactionDefinition实现类来完成对事务属性的设置,
    属性如下👇

    1. 传播行为
    2. 隔离规则
    3. 回滚规则
    4. 事务超时
    5. 是否只读?

    事务传播行为

    当事务方法被另一个事务方法调用时,必须指定事务应该如何传播,
    Spring的7种传播行为如下👇

    5c5ef502a4a80
    事务隔离级别

    隔离级别定义了一个事务可能受其他并发事务影响的程度
    隔离级别分为👇

    5c5ef511ce765

    事务中注意的问题

    • 事务是否只读
      • 利用数据库事务的“只读”属性,进行特定优化处理
    • 注意
      • 事务的是否“只读”属性,不同的数据厂商支持不同
      • 通常而言:只读属性的应用要参考厂商的具体支持说明,比如
        Oracle的 “readOnly” 不起作用,不影响其增删改查
        MySql的 “readOnly“ 为true,只能查,增删改则出异常
    • 事务超时

      事务超时就是事务的一个定时器,在特定时间内事务如果没有执行完毕,那么就会自动回滚,而不是一直等待其结束

    • 设计事务时注意点:

      为了使应用程序很好地运行,事务不能运行太长的时间。因为事务可能涉及对后端数据库的锁定,所以长时间的事务会不必要的占用数据库资源

    • 事务回滚

    默认情况下,事务只有遇到运行期异常时才会回滚,而在遇到检查型异常时不会回滚

    • 自定义回滚策略

    声明事务在遇到特定的检查型异常时像遇到运行期异常那样回滚
    声明事务遇到特定的异常不回滚,即使这些异常时运行期异常

    相关文章

      网友评论

        本文标题:Spring事务

        本文链接:https://www.haomeiwen.com/subject/oyjueqtx.html