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的资料请关注脚本之家其它相关文章!

相关文章

  • Mybatis基础概念与高级应用小结

    Mybatis基础概念与高级应用小结

    这篇文章主要介绍了Mybatis基础回顾与高级应用,本文内容有点小长,希望大家耐心阅读,此文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Redisson之分布式锁原理全面分析

    Redisson之分布式锁原理全面分析

    这篇文章主要介绍了Redisson分布式锁原理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 一小时迅速入门Mybatis之增删查改篇

    一小时迅速入门Mybatis之增删查改篇

    这篇文章主要介绍了迅速入门Mybatis之增删查改篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • SpringBoot打印启动时异常堆栈信息详解

    SpringBoot打印启动时异常堆栈信息详解

    在本篇文章里小编给大家整理的是关于SpringBoot打印启动时异常堆栈信息,有需要的朋友们可以学习下。
    2019-11-11
  • IDEA报java: java.lang.OutOfMemoryError: Java heap space错误解决办法

    IDEA报java: java.lang.OutOfMemoryError: Java heap space错误

    这篇文章主要给大家介绍了关于IDEA报java: java.lang.OutOfMemoryError: Java heap space错误的解决办法,文中将解决的办法介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • Java中keytool的使用

    Java中keytool的使用

    Keytool 是一个JAVA环境下的安全钥匙与证书的管理工具,Keytool将密钥(key)和证书(certificates)存在一个称为keystore 的文件(受密码保护)中,本文重点给大家介绍keytool的使用,感兴趣的朋友一起看看吧
    2022-02-02
  • SpringBoot使用Netty实现远程调用的示例

    SpringBoot使用Netty实现远程调用的示例

    这篇文章主要介绍了SpringBoot使用Netty实现远程调用的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • java实现简单计算器

    java实现简单计算器

    这篇文章主要为大家详细介绍了java实现简单计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 浅谈JVM 底层解析 i++和 ++i 区别

    浅谈JVM 底层解析 i++和 ++i 区别

    这篇文章主要介绍了JVM 底层解析 i++和 ++i 区别,需要的朋友可以参考下面文章的具体内容
    2021-09-09
  • Java注解机制之Spring自动装配实现原理详解

    Java注解机制之Spring自动装配实现原理详解

    这篇文章主要为大家详细介绍了Java注解机制之Spring自动装配实现原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10

最新评论