`

spring 事务(常规)

 
阅读更多

1 本地事务,全局事务

   本地事务:在单个 EIS 或数据库的本地并且限制在单个进程内的事务。本地事务不涉及多个数据来源

   全局事务:资源管理器管理和协调的事务,可以跨越多个数据库和进程。资源管理器一般使用 XA 二阶段提交协议与“企业信息系统”(EIS) 或数据库进行交互

2 spring事务api

   PlatformTransactionManager, TransactionDefinition, SavepointManager, TransactionStatus

 

   (1) PlatformTransactionManager:事务管理平台,一个策略接口,不同的持久层框架使用不同的实现类来处理事务,例如:DataSourceTransactionManager, HibernateTransactionManager, JdoTransactionManager, JmsTransactionManager, JpaTransactionManager, JtaTransactionManager, TopLinkTransactionManager, WebLogicJtaTransactionManager,通过实现此接口,Spring可以管理任何实现了这些接口的事务,

此接口方法:

TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; 根据事务的隔离级别和传播行为,返回当前活动的事务或者产生一个新的事务

void commit(TransactionStatus status) throws TransactionException;监视事务状态,并提交一个事务

void rollback(TransactionStatus status) throws TransactionException;回滚给定的事务

 

    (2) TransactionDefinition: 这个接口的作用就是定义事务的名称、隔离级别、传播行为、超时时间长短、只读属性等

主要方法:

 int getIsolationLevel()
          返回事务的隔离级别。
 String getName()
          返回事务的名字。
 int getPropagationBehavior()
          返回事务的是传播行为。
 int getTimeout()
          返回事务的超时时间。
 boolean isReadOnly()
          返回是否(优化为)只读属性。

    (3)SavepointManager:事务回滚点管理接口,提供创建、释放回滚点,或者回滚到指定的回滚点
 Object createSavepoint()
          Create a new savepoint.
          创建一个新的回滚点。
 void releaseSavepoint(Object savepoint)
          Explicitly release the given savepoint.
          释放一个给定的回滚点。
 void rollbackToSavepoint(Object savepoint)
          Roll back to the given savepoint.
          回滚到给定的回滚点。
    (4) TransactionStatus 这个接口的作用就是获取事务的状态(回滚点、是否完成、是否新事物、是否回滚)属性,还可以进行事务rollback-only的设置
 boolean hasSavepoint()
          判断这个事务是否有一个内在的回滚点(savepoint),即创建为基于回滚点的嵌套事务。
 boolean isCompleted()
          判断这个事务是否完成,也就是已经提交或者回滚。
 boolean isNewTransaction()
          判断一个事物是否为新事务,或者是这个事务参与到一个已经存在的事务里面。
 boolean isRollbackOnly()
          判断这个事务是否已经设置了rollback-only。
 void setRollbackOnly()
          设置这个事务rollback-only。
3 spring 事务传播特性
 Required:必须有逻辑事务,否则新建一个事务,使用PROPAGATION_REQUIRED指定,表示如果当前存在一个逻辑事务,则加入该逻辑事务,否则将新建一个逻辑事务
 RequiresNew:创建新的逻辑事务,使用PROPAGATION_REQUIRES_NEW指定,表示每次都创建新的逻辑事务(物理事务也是不同的)
 Supports:支持当前事务,使用PROPAGATION_SUPPORTS指定,指如果当前存在逻辑事务,就加入到该逻辑事务,如果当前没有逻辑事务,就以非事务方式执行
 NotSupported:不支持事务,如果当前存在事务则暂停该事务,使用PROPAGATION_NOT_SUPPORTED指定,即以非事务方式执行,如果当前存在逻辑事务,就把当前事务暂停,以非事务方式执行
 Mandatory:必须有事务,否则抛出异常,使用PROPAGATION_MANDATORY指定,使用当前事务执行,如果当前没有事务,则抛出异常(IllegalTransactionStateException)

 Never:不支持事务,如果当前存在是事务则抛出异常,使用PROPAGATION_NEVER指定,即以非事务方式执行,如果当前存在事务,则抛出异常(IllegalTransactionStateException)

 

 Nested:嵌套事务支持,使用PROPAGATION_NESTED指定,如果当前存在事务,则在嵌套事务内执行,如果当前不存在事务,则创建一个新的事务,嵌套事务使用数据库中的保存点来实现,即嵌套事务回滚不影响外部事务,但外部事务回滚将导致嵌套事务回滚

 

Nested和RequiresNew的区别:

1、  RequiresNew每次都创建新的独立的物理事务,而Nested只有一个物理事务;

2、  Nested嵌套事务回滚或提交不会导致外部事务回滚或提交,但外部事务回滚将导致嵌套事务回滚,而 RequiresNew由于都是全新的事务,所以之间是无关联的;

3、  Nested使用JDBC 3的保存点实现,即如果使用低版本驱动将导致不支持嵌套事务。

使用嵌套事务,必须确保具体事务管理器实现的nestedTransactionAllowed属性 为true,否则不支持嵌套事务,如DataSourceTransactionManager默认支持,而 HibernateTransactionManager默认不支持,需要我们来开启。

分享到:
评论

相关推荐

    Spring 揭秘 全面 深入了解Spring

    同时,还会讲解Spring Boot,这是一个简化Spring应用初始设置和常规配置的工具,使开发者能够快速启动新项目。 数据库集成是Spring应用不可或缺的一部分,书中会涵盖JDBC模板、Hibernate和MyBatis等ORM框架与Spring...

    spring+jotm 多数据源事务管理(二)hibernate

    首先,我们需要了解在没有使用JOTM时,Spring与Hibernate的常规配置。在提供的XML配置代码中,可以看到Spring配置了一个名为`dataSource1`的数据源。这里使用了Apache Commons DBCP库来创建数据源,设置了驱动类名、...

    spring经典文档pdf

    Spring Boot应用可以通过@SpringBootApplication注解快速启动,内置了Tomcat服务器,且默认配置适用于大多数情况,减少了大量常规配置的工作。 Spring Cloud是Spring生态系统的一部分,用于构建分布式系统,如服务...

    Spring6.1.4

    Spring Boot 是 Spring 框架的扩展,旨在简化初始设置和常规配置。通过预配置的“起步依赖”(Starters),Spring Boot 允许快速启动项目,无需大量的XML配置。Spring Boot 还内置了Tomcat服务器,可以快速运行应用...

    spring编程式和声明式事务管理

    编程式事务管理适合对事务有特殊需求或需要精细控制的场合,而声明式事务管理则更适合大部分常规情况,让代码更加整洁。在实际项目中,根据具体需求和团队习惯来选择合适的事务管理方式是非常重要的。

    spring-5.3.14-dist.zip(spring-framework-5.3.14)

    1. 利用Spring Boot简化配置:Spring Boot是基于Spring Framework构建微服务应用的快速启动器,可以极大地减少常规配置工作。 2. 响应式编程:借助Reactor库和WebFlux,可以实现非阻塞、高并发的Web应用。 3. AOP与...

    Spring之Spring2.5集成Hibernate3.6

    1. **事务管理**:Spring提供了一种统一的事务管理方式,可以在不同数据源上进行声明式或编程式事务控制,使得事务管理更加简单且健壮。 2. **对象持久化**:通过Spring的Hibernate模板或者JPA抽象层,开发者可以...

    spring-cglib-repack-3.2.5.jar和spring-objenesis-repack-2.6.jar

    CGLIB通过字节码生成技术,为原始类创建一个子类,并在子类中拦截方法调用,实现事务管理、日志记录、性能监控等切面功能。3.2.5是CGLIB的一个版本号,表明这是CGLIB库的第3.2.5次更新,包含了之前版本的改进和修复...

    Spring源码编译缺少的两个包:spring-cglib-repack-3.2.0.jar和spring-objenesis-repack-2.2.jar

    当Spring管理的bean需要被代理以实现AOP功能,如事务管理、性能监控等,但该bean又没有实现任何接口时,CGLIB就会派上用场。CGLIB通过字节码技术生成一个目标类的子类,并在子类中拦截方法调用,实现代理逻辑。...

    spring-framework-4.3.10.RELEASE

    《Spring框架4.3.10.RELEASE深度解析》 Spring框架是Java开发中的核心工具集,它极大地简化了...无论是简单的控制层逻辑,还是复杂的事务管理,Spring都能提供优雅的解决方案,这也是其在Java开发领域备受推崇的原因。

    spring-cglib-repack-3.2.0.jar和spring-objenesis-repack-2.1.jar

    Spring使用CGILib作为其代理实现的一部分,特别是在进行代理代理时,如事务管理、AOP切面等。 其次,`spring-objenesis-repack-2.1.jar`则是关于Objenesis库。Objenesis是一个轻量级库,用于在Java中快速实例化无参...

    最新版spring-framework-4.3.10.RELEASE-dist完整包

    6. **Spring Boot**:虽然不在本压缩包内,但4.3.x版本的Spring Framework与Spring Boot兼容,Spring Boot旨在简化Spring应用的初始设置和常规配置。 7. **Spring Data**:Spring Data项目简化了与各种数据存储(如...

    Spring 攻略

    Spring提供了声明式事务管理,让你无需在业务代码中显式处理事务,提高了代码的可读性和可维护性。 Spring MVC是Spring框架用于构建Web应用的部分。它提供了一个模型-视图-控制器(MVC)架构,简化了Web开发流程。...

    spring4源码所需要的spring-objenesis-repack-2.1.jar,spring-cglib-repack-3.1.jar

    当Spring需要创建一个对象但又无法通过常规方式调用构造函数时,Objenesis可以派上用场。例如,在AOP(面向切面编程)中,Objenesis帮助Spring快速生成代理对象,无需知道实际目标类的构造函数详情。 2. **CGLIB...

    Spring源码解读.pptx

    Spring Boot简化了Spring应用的初始设置,通过自动配置和“starters”(如`spring-boot-starter-web`)来减少常规的配置工作。创建一个Spring Boot项目,实际上就是构建在Spring Framework的基础上,依赖其核心模块...

    springdemo spring 简单学习例子

    Spring Boot 可以快速创建独立运行的应用,它默认配置了许多常见的设置,减少了常规的配置工作。 10. **集成测试**:在 "springdemo" 项目中,可能包含了对服务层、持久层的集成测试,以确保各个组件协同工作的正确...

    web项目整合spring

    总之,"web项目整合spring"是一个涵盖多个方面的过程,涉及到Spring框架的核心组件以及Web开发的常规流程。`applicationContext.xml`作为Spring的配置中心,是整个整合过程的关键。理解并熟练掌握这些知识点,对于...

    Java_Spring和Spring引导教程绝对初学者10in1 Spring到Spring引导到REST API到全.zip

    5. **Spring事务管理**:支持编程式和声明式事务管理,确保业务逻辑的完整性和一致性。 6. **Spring Boot测试**:提供测试支持,包括单元测试、集成测试以及端到端测试。 二、Spring Boot 1. **起步依赖(Starter...

    java——spring

    它预设了很多默认配置,减少了大量常规的Spring配置工作,让开发者能够快速启动项目。 8. **Spring Security**: Spring Security是Spring生态中的安全模块,提供了一套完整的权限管理和认证解决方案,用于保护Web...

    spring4 中文API

    它提供了一个全面的编程模型,并支持广泛的解决方案领域,如:依赖注入(Dependency Injection, DI)、面向切面编程(Aspect Oriented Programming, AOP)、数据访问/集成、事务管理、Web应用开发等。 #### 依赖...

Global site tag (gtag.js) - Google Analytics