Spring事务

容器事务

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事务)