• 20191105 《Spring5高级编程》笔记-第9章


    第9章 事务管理

    一些名词:

    • 2PC(2 Phase Commit)
    • XA协议
    • JTS(Java Transaction Service)
    • JCA(Java EE Connector Architecture)
    • JPA(Java Persistence API)
    • JPQL(Java Persistence Query Language)

    Spring支持声明式和编程式事务管理。

    9.1 研究Spring事务抽象层

    在使用事务时,必须选择是使用全局事务(分布式事务)还是本地事务。本地事务特定于单个事务资源(例如,JDBC连接),而全局事务由容器管理并且可以跨越多个事务资源。

    使用JTA实现的全局事务的高级视图:
    image

    9.2 PlatformTransactionManager的实现

    org.springframework.transaction.PlatformTransactionManager 接口使用 TransactionDefinitionTransactionStatus 接口来创建和管理事务。

    9.3 分析事务属性

    事务的四个属性:ACID(原子性、一致性、隔离性、持久性)。对事务的原子性、一致性和持久性是无法控制的(或者说由数据库控制)。但是,可以控制事务的传播和超时,以及配置事务是否应为制度并指定隔离级别。

    Spring将以上事务的设置封装在TransactionDefinition接口中。该接口被用于Spring的事务支持的核心接口,即PlatformTransactionManager接口,该接口的实现在特定平台(如JDBC或JTA)上执行事务管理。其核心方法PlatformTransactionManager.getTransaction(TransactionDefinition definition)TransactionDefinition 作为参数,并返回一个TransactionStatus接口。TransactionStatus接口用于控制事务执行,即设置事务结果并检查事务是否完成或是否为新事务。

    9.3.1 TransactionDefinition接口

    TransactionDefinition接口控制事务的属性。

    TransactionDefinition.getIsolationLevel() 返回事务隔离级别:
    image

    TransactionDefinition.getIsolationLevel() 返回事务传播类型:
    image

    9.3.2 TransactionStatus接口

    TransactionStatus接口允许事务管理器控制事务的执行。

    TransactionStatus.setRollbackOnly() 会导致回滚并结束活动事务。

    9.4 示例代码的示例数据模型和基础结构

    9.4.2 示例数据模型和通用类

    org.springframework.transaction.annotation.Transactional
    @Transactional注解的属性:
    image

    Spring的JpaTransactionManager不支持自定义隔离级别。它总是使用底层数据存储的默认隔离级别。如果使用Hibernate作为JPA服务提供程序,可以扩展HibernateJpaDialect类以支持自定义隔离级别。

    9.4.3 使用AOP配置进行事务管理

    引入注解之后,在XML中使用AOP名称空间配置基本被弃用了,但是在无法对代码编辑的情况下是很有用的。

    9.5 使用编程式事务

    编程式事务有两种选择,第一种是将一个PlatformTransactionManager 实例注入到bean中,并直接与事务管理器进行交互。第二种选择是使用Spring提供的org.springframework.transaction.support.TransactionTemplate类。

    在一般情况下建议使用声明式事务。

    9.6 使用Spring实现全局事务

    在Java中,JTA是实现全局事务的事实标准。

    和本地事务一样,Spring支持JTA事务,并从业务代码中隐藏相关逻辑。

    9.6.3 Spring Boot JTA

    <!--JTA-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jta-atomikos</artifactId>
    </dependency>
    
  • 相关阅读:
    Unity3D-光照贴图技术
    登岳麓山
    第一个OC程序
    Unity3D之碰撞体,刚体
    TypeError: 'stepUp' called on an object that does not implement interface HTMLInputElement
    QQ互联登录回调路径错误redirect uri is illegal(100010)
    Quartz.Net使用
    C# 文件相关操作
    微信扫码支付模式一和模式二的区别
    ankhSVN安装后,VS2010使用
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/11798111.html
Copyright © 2020-2023  润新知