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():判断当前事务是否是一个新事务

  • 相关阅读:
    Oracle的function存储函数简单实例
    Java保留小数点后两位,解决精度丢失问题
    天津贷款买房提取公积金相关问题
    Springboot配置连接两个数据库
    JDK8:Lambda根据 单个字段、多个字段,分组求和
    原生Ajax方式请求后端导出Excel,在浏览器页面显示下载Excel表(前端请求带header)
    Java实现 微信小程序 + 消息推送
    Centos7安装docker
    将博客搬至CSDN
    读书笔记——数学之美
  • 原文地址:https://www.cnblogs.com/guanghe/p/9317735.html
Copyright © 2011-2022 走看看