美文网首页
spring 事务管理抽象

spring 事务管理抽象

作者: 不迷失 | 来源:发表于2016-06-15 19:25 被阅读167次

    Spring提供了一致的事务管理抽象。这个抽象是Spring最重要的抽象之一, 它有如下的优点:

    为不同的事务API提供一致的编程模型,如JTA、JDBC、Hibernate、iBATIS数据库层 。

    提供比大多数事务API更简单的,易于使用的编程式事务管理API

    整合Spring数据访问抽象

    支持Spring声明式事务管理

    JDBC事务容易使用,但也有明显的缺点:它们不能用于多个事务性资 源,并且趋向侵入的编程模型。

    Spring解决了这些问题。它使应用开发者能够使用在任何环境 下使用一致的编程模型。你可以只写一次你的代码,这在不同环境 下的不同事务管理策略中很有益处。Spring同时提供声明式和编程式事务管理。

    使用编程式事务管理,开发者直接使用Spring事务抽象,这个抽象可以使用在任何 底层事务基础之上。使用首选的声明式模型,开发者通常书写很少的事务相关代 码,因此不依赖Spring或任何其他事务API。

    Spring事务抽象的关键是事务策略的概念。

    这个概念由 org.springframework.transaction.PlatformTransactionManager
    接口体现,如下:
    public interface PlatformTransactionManager { TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; void commit(TransactionStatus status) throws TransactionException; void rollback(TransactionStatus status) throws TransactionException; }

    这首先是一个SPI接口,虽然它也可以在编码中使用。注意按照Spring的哲学, 这是一个接口。因而如果需要它可以很容易地被模拟和 桩化。它也没有和一个查找策略如JNDI捆绑在一起:PlatformTransactionManager 的实现定义和其他Spring IoC容器中的对象一样。这个好处使得即使使用JTA,也 是一个很有价值的抽象:事务代码可以比直接使用JTA更加容易测试。

    继续Spring哲学,TransactionException
    是unchecked的。 低层的事务失败几乎都是致命。很少情况下应用程序代码可以从它们 中恢复,不过应用开发者依然可以捕获并处理TransactionException

    getTransaction()
    根据一个类型为 TransactionDefinition
    的参数返回一个 TransactionStatus
    对象。返回的 TransactionStatus
    对象可能代表一个新的或已经存在的事 务(如果在当前调用堆栈有一个符合条件的事务)。
    一个TransactionStatus
    也是和执 行的线程关联的。

    TransactionDefinition
    接口指定:

    事务隔离:当前事务和其它事务的隔离的程度。 例如,这个事务能否看到其他事务未提交的写数据?

    事务传播:通常在一个事务中执行的 所有代码都会在这个事务中运行。但是,如果一个事务上下文已经存在, 有几个选项可以指定一个事务性方法的执行行为:例如,简单地在现有的 事务中运行(大多数情况);或者挂起现有事务,创建一个新的事务。

    事务超时: 事务在超时前能运行多 久(自动被底层的事务基础设施回滚)。

    只读状态: 只读事务不允许修改任何数 据。只读事务在某些情况下是一种非常有用的优化。

    这些设置反映了标准概念。如果需要,请查阅讨论事务隔离层次和其他核心事 务概念的资源:理解这些概念在使用Spring和其他事务管理解决方案时是非常关键的。

    TransactionStatus
    接口为处理事务的代码提供一个简单 的控制事务执行和查询事务状态的方法。这个概念应该是熟悉的,因为它们在所 有的事务API中是相同的:
    public interface TransactionStatus { boolean isNewTransaction(); void setRollbackOnly(); boolean isRollbackOnly(); }
    但是使用Spring事务管理时,定义 PlatformTransactionManager
    的实现是基本方式。在好的Spring 风格中,这个重要定义使用IoC实现。

    微信公众号: java技术*
    技术交流群*: 245130488

    相关文章

      网友评论

          本文标题:spring 事务管理抽象

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