Spring事务框架之TransactionDefinition源码解析

 更新时间:2023年08月29日 11:52:25   作者:福  
这篇文章主要为大家介绍了Spring事务框架之TransactionDefinition源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Spring事务的底层原理

  • Spring事务的框架。
  • Spring事务引入机制,主要学习@EnableTransactionManagement的相关内容。
  • Spring事务的控制机制,主要学习@Trasactional相关内容。

先从Spring事务的框架开始。

Spring事务框架中最重要的内容主要包括:

  • 事务管理器TransactionManager。
  • 事务定义TransactionDefinition。
  • 事务状态TransactionStatus。

其中事务管理器是核心,研究事务管理器需要用到TransactionDefinition和TransactionStatus,所以我们先研究这两部分。

TransactionDefinition

顾名思义,TransactionDefinition是用来定义事务属性的。

有两个比较重要的实现类,一个是DefaultTransactionAttribute.

另一个是DefaultTransactionTemplate:

下来看一下TransactionDefinition中定义的几个事务属性:

事务传播机制,7个事务传播机制的具体含义,我们在其他文章中已经分析过了:

int PROPAGATION_REQUIRED = 0;
int PROPAGATION_SUPPORTS = 1;
int PROPAGATION_MANDATORY = 2;
int PROPAGATION_REQUIRES_NEW = 3;
int PROPAGATION_NOT_SUPPORTED = 4;
int PROPAGATION_NEVER = 5;
int PROPAGATION_NESTED = 6;

隔离级别

数据库隔离级别:

//数据库的默认隔离级别
int ISOLATION_DEFAULT = -1;
int ISOLATION_READ_UNCOMMITTED = 1;
int ISOLATION_READ_COMMITTED = 2; 
int ISOLATION_REPEATABLE_READ = 4;
int ISOLATION_SERIALIZABLE = 8;

默认超时

int TIMEOUT_DEFAULT = -1;

然后,有一个获取默认事务定义的方法(用意待考):

static TransactionDefinition withDefaults() {
     return StaticTransactionDefinition.INSTANCE;
 }

DefaultTransactionAttribute

其中比较重要的一个方式是rollbackOn:

public boolean rollbackOn(Throwable ex) {
     return (ex instanceof RuntimeException || ex instanceof Error);
 }

我们先来看看JavaDoc:

The default behavior is as with EJB: rollback on unchecked exception (RuntimeException), assuming an unexpected outcome outside of any business rules. Additionally, we also attempt to rollback on Error which is clearly an unexpected outcome as well. By contrast, a checked exception is considered a business exception and therefore a regular expected outcome of the transactional business method, i.e. a kind of alternative return value which still allows for regular completion of resource operations.
This is largely consistent with TransactionTemplate's default behavior, except that TransactionTemplate also rolls back on undeclared checked exceptions (a corner case). For declarative transactions, we expect checked exceptions to be intentionally declared as business exceptions, leading to a commit by default.

 默认行为与EJB相同:发生运行时异常或发生Error时回滚。而对于check exception一般会被认为是一个业务可以认可或期望的结果,因此是允许交易完成的。这个默认行为与TransactionTemplate的默认行为是保持一致的。

大概的意思是说:默认情况下发生运行时异常或Error的时候事务回滚。而这个默认行为就是通过这个rollbackOn方法来保证的:

public boolean rollbackOn(Throwable ex) {
        return (ex instanceof RuntimeException || ex instanceof Error);
    }

Spring事务控制中的事务定义的最终落地实现就是这个TransactionAttribute,不过他是通过TransactionAttributeSource持有的,后续分析Spring事务启用机制@EnalbeTransactionManagment的时候会看到。

TransactionDefinition的研究就到这里,下一篇文章研究TransactionStatus。

以上就是Spring事务框架之TransactionDefinition源码解析的详细内容,更多关于Spring事务TransactionDefinition的资料请关注脚本之家其它相关文章!

相关文章

  • 基于Spring Boot 的小区人脸识别与出入记录管理系统功能

    基于Spring Boot 的小区人脸识别与出入记录管理系统功能

    文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型设计、接口开发与系统优化方案,为智慧社区提供高效安全管理工具,感兴趣的朋友跟随小编一起看看吧
    2025-08-08
  • Maven项目中resources配置总结

    Maven项目中resources配置总结

    这篇文章主要介绍了Maven项目中resources配置总结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Mybatis-Plus乐观锁配置流程

    Mybatis-Plus乐观锁配置流程

    这篇文章主要介绍了Mybatis-Plus乐观锁配置使用流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作有一定的参考学习价值,感兴趣的朋友们下面随着小编来一起学习吧
    2024-01-01
  • 浅谈Java读写注册表的方式Preferences与jRegistry

    浅谈Java读写注册表的方式Preferences与jRegistry

    这篇文章主要介绍了浅谈Java读写注册表的方式Preferences与jRegistry,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Spring中SpEL表达式的使用全解

    Spring中SpEL表达式的使用全解

    SpEL是Spring框架中用于表达式语言的一种方式,本文主要介绍了Spring中SpEL表达式的使用全解,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • Java concurrency线程池之线程池原理(一)_动力节点Java学院整理

    Java concurrency线程池之线程池原理(一)_动力节点Java学院整理

    这篇文章主要为大家详细介绍了Java concurrency线程池之线程池原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Jmeter参数化实现原理及过程解析

    Jmeter参数化实现原理及过程解析

    这篇文章主要介绍了Jmeter参数化实现原理及过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Jasypt的StandardPBEByteEncryptor使用源码解析

    Jasypt的StandardPBEByteEncryptor使用源码解析

    这篇文章主要介绍了Jasypt的StandardPBEByteEncryptor使用源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • java自定义Scanner类似功能类的实例讲解

    java自定义Scanner类似功能类的实例讲解

    这篇文章主要介绍了java自定义Scanner类似功能类的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • spring整合redisson开启缓存方式

    spring整合redisson开启缓存方式

    这篇文章主要介绍了spring整合redisson开启缓存方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09

最新评论