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

  • 相关阅读:
    Asp.net 程序连接orcle如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,
    Navicat 远程连接 Oracle11g 数据库报错 No listener 的问题
    springMVC中@DateTimeFormat 失效的处理
    单例设计模式中懒汉式线程安全的处理
    ajax同步请求
    vue.js在标签属性中拼接字符串
    vue.js进行遍历
    html页面之间的传值
    URL编码和解码的一个小问题(JS方法和JAVA方法)
    SolrJ的配置及使用
  • 原文地址:https://www.cnblogs.com/guanghe/p/9317735.html
Copyright © 2020-2023  润新知