zoukankan      html  css  js  c++  java
  • Spring的事务管理

    spring支持编程式事务管理和声明式事务管理两种方式。

      编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。

      声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。

      显然声明式事务管理要优于编程式事务管理,这正是spring倡导的非侵入式的开发方式。声明式事务管理使业务代码不受污染,一个普通的POJO对象,只要加上注解就可以获得完全的事务支持。和编程式事务相比,声明式事务唯一不足地方是,后者的最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等。

    Spring事务管理主要包括3个接口,Spring的事务主要是由他们三个共同完成的。

    1)PlatformTransactionManager:事务管理器--主要用于平台相关事务的管理

     主要有三个方法:commit  事务提交;

          rollback  事务回滚;

          getTransaction  获取事务状态。

    2)TransactionDefinition:事务定义信息--用来定义事务相关的属性,给事务管理器PlatformTransactionManager使用

      这个接口有下面四个主要方法:

      getIsolationLevel:获取隔离级别;

      getPropagationBehavior:获取传播行为;

      getTimeout:获取超时时间;

      isReadOnly:是否只读(保存、更新、删除时属性变为false--可读写,查询时为true--只读)

      事务管理器能够根据这个返回值进行优化,这些事务的配置信息,都可以通过配置文件进行配置。

    3)TransactionStatus:事务具体运行状态--事务管理过程中,每个时间点事务的状态信息。

      例如它的几个方法:

      hasSavepoint():返回这个事务内部是否包含一个保存点,

      isCompleted():返回该事务是否已完成,也就是说,是否已经提交或回滚

      isNewTransaction():判断当前事务是否是一个新事务

  • 相关阅读:
    图片懒加载技术
    验证码处理
    基于requests模块的cookie,session和线程池爬取
    最快理解
    Golang
    Django REST framework
    Django REST framework
    Django
    Django
    搭建邮件服务器 Postfix + Dovecot (CentOS)
  • 原文地址:https://www.cnblogs.com/guanghe/p/9317735.html
Copyright © 2011-2022 走看看