返回顶部
首页 > 资讯 > 后端开发 > Python >从Spring源码解析事务失效的原因
  • 468
分享到

从Spring源码解析事务失效的原因

2024-04-02 19:04:59 468人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、前言二、方法不是 public 的三、内部方法间调用导致事务失效四、异常类型是否配置正确五、异常被catch住一、前言 1.Bean是否是代理对象 2.入口函数是否是pub

一、前言

1.Bean是否是代理对象

2.入口函数是否是public的

3.数据库是否支持事务(Mysql的Mvlsam不支持事务),行才支持事务

4.切点是否配置正确

5.内部方法间调用导致事务失效

因为this不是代理对象,可以配置 expose-proxy="true",就可以通过AopContext.currentProxy()获取到当前类的代理对象。


<! -- expose-proxy="true”类内部可以获取到当前类的代理对象--><aop: aspectj-autoproxy expose-proxy="true" />
@Enab1eAspect3AutoProxy(exposeProxy = true)

也可以注入当前bean

6.异常类型是否配置正确

默认只支持RuntimeException和Error,不支持检查异常

想要支持检查异常需要配置rollbackFor

@Transactional(rollbackFor = Exception.class)

7.异常被catch住了

代码中手动catch了异常,然后又未抛出来,此时事务就不生效了。

二、方法不是 public 的

以下来自spring官方文档

大概意思就是 @Transactional 只能用于 public 的方法上,否则事务不会失效,如果要用在非 public 方法上,可以开启 AspectJ 代理模式。

Spring事务失效8大原因、事务失效原因

TransactionInterceptor#invoke

TransactionAspectSupport#invokeWithinTransaction

AbstractFallbackTransactionAttributeSource#getTransactionAttribute

AbstractFallbackTransactionAttributeSource#computeTransactionAttribute

allowPublicMethodsOnly方法由子类AnnotationTransactionAttributeSource实现,该子类方法中默认是true,所以当你加了事务注解的方法不是public时,该方法直接返回null

以上只说明 在spring的事务管理中存在这样一个 public的判断,至于后边为啥由于这个判断导致没有织入事务,并没有说明;

public导致失效原因

三、内部方法间调用导致事务失效

因为spring声明式事务是基于AOP实现的,是使用动态代理来达到事务管理的目的,当前类调用的方法上面加@Transactional 这个是没有任何作用的,因为调用这个方法的是this,没有经过 Spring 的代理类。

解决方案一:

再声明一个service,自己注入自己,将内部调用改为外部调用

解决方案二:

解决方案三:

使用编程式事务

四、异常类型是否配置正确

抛出RuntimeException异常,事务生效

抛出Exception异常,事务不生效

我们看下TransactionInterceptor类

TransactionInterceptor#invoke

TransactionAspectSupport#invokeWithinTransaction

TransactionAspectSupport#completeTransactionAfterThrowing

配置了这个,Exception异常的事务,就会生效

五、异常被catch住

代码中手动catch了异常,然后又未抛出来,此时事务就不生效了。

解决方法:要么不catch需要回滚的异常,要么catch之后再抛出,要么手动回滚

解决方案一:

catch之后往外抛异常

解决方案二:

catch之后,设置手动回滚

到此这篇关于从Spring源码解析事务失效的原因的文章就介绍到这了,更多相关Spring事务失效内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 从Spring源码解析事务失效的原因

本文链接: https://lsjlt.com/news/127776.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 从Spring源码解析事务失效的原因
    目录一、前言二、方法不是 public 的三、内部方法间调用导致事务失效四、异常类型是否配置正确五、异常被catch住一、前言 1.Bean是否是代理对象 2.入口函数是否是pub...
    99+
    2024-04-02
  • Spring @Transactional事务失效的原因分析
    目录前言1.非 public 修饰的方法2.timeout 超时3.代码中有 try/catch4.调用类内部 @Transactional 方法5.数据库不支持事务总结前言 一个程...
    99+
    2024-04-02
  • spring事务注解失效的原因有哪些
    以下是一些可能导致Spring事务注解失效的原因:1. 配置问题:可能是由于配置文件的错误或不完整,导致Spring无法正确解析和处...
    99+
    2023-08-23
    spring
  • Spring事务失效的原因是什么
    本篇内容主要讲解“Spring事务失效的原因是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring事务失效的原因是什么”吧!1、数据库引擎不支持事务这...
    99+
    2024-04-02
  • 分析Springboot中嵌套事务失效原因详解
    首先两个事务方法,其中一个调用另一个。 @Transactional(rollbackFor = Exception.class) public void trance() { ...
    99+
    2024-04-02
  • Spring源码剖析9:Spring事务源码剖析
    转自:http://www.linkedkeeper.com/detail/blog.actionbid=1045...
    99+
    2023-06-02
  • 从MySQL源码看日志命令失效的原因有哪些
    这篇文章主要为大家展示了“从MySQL源码看日志命令失效的原因有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“从MySQL源码看日志命令失效的原因有哪些”这...
    99+
    2024-04-02
  • Java spring事务及事务不生效的原因详解
    目录注解@Transactional的属性参数propagation事务的传播机制isolation事务的隔离级别常用数据库的默认隔离级别readOnly事务的读写性事务的只读性概念...
    99+
    2024-04-02
  • Java Spring AOP源码解析之事务实现原理
    目录不用Spring管理事务?编程式事务管理使用PlatformTransactionManager使用TransactionTemplate声明式事务管理使用@Transactio...
    99+
    2024-04-02
  • Spring事务失效的示例分析
    这篇文章给大家分享的是有关Spring事务失效的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Spring事务最终依赖的数据库的事务,如果用的是mysql的话,执行引擎要是innodb;因为只有innoD...
    99+
    2023-06-29
  • Spring事务失效的场景分析
    这篇文章主要介绍“Spring事务失效的场景分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring事务失效的场景分析”文章能帮助大家解决问题。1)未被Spring管理使用Spring事务的前...
    99+
    2023-07-02
  • Spring事务失效的一种原因关于this调用的问题
    PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启事务; PROPAGATION_REQUIRES_NEW:总是开启一...
    99+
    2024-04-02
  • Spring源码解析之编程式事务
    目录一、前言二、编程式事务解析三、编程式事务示例四、TransactionCallback五、TransactionCallbackWithoutResult一、前言 在Sprin...
    99+
    2024-04-02
  • Spring事务回滚失败的原因有哪些
    Spring事务回滚失败的原因有以下几种情况: 事务配置错误:可能是因为事务管理器配置不正确,或者在事务方法上没有正确标注@Tr...
    99+
    2024-03-01
    Spring
  • Java Spring AOP源码解析中的事务实现原理是什么
    这篇文章将为大家详细讲解有关Java Spring AOP源码解析中的事务实现原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。不用Spring管理事务?让我们先来...
    99+
    2023-06-22
  • Spring声明式事务注解的源码分析
    本文小编为大家详细介绍“Spring声明式事务注解的源码分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring声明式事务注解的源码分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、@EnableTr...
    99+
    2023-07-02
  • React事件节流效果失效的原因及解决
    目录此处问题出现在: 解决方式1: 解决方式2: 在构造函数中赋值初始化采坑总结:今天做react项目中,给一个 input onKeyDown 事件做节流,出现...
    99+
    2024-04-02
  • Spring事务原理解析
    目录前言问题描述代码复现排查1. 锁失效2. 事务隔离级别3. 修改Spring事务传播配置解决方案前言 最近在编写公司APP产品的商品砍价功能,其中有一个接口涉及并发访问。自测时通...
    99+
    2022-12-20
    Spring事务管理机制 Spring事务管理方式 Spring事务底层
  • Spring源码解析之事务传播特性
    目录一、使用方式二、getTransaction三、handleExistingTransaction四、NESTED 嵌套事务五、个人理解六、总结一、使用方式 可以采用Transa...
    99+
    2024-04-02
  • 解读Spring接口方法加@Transactional失效的原因
    目录问题总结问题 今天项目测试一个方法的时候,发现日志报错 日志报错大致如下:Connection is read-only. Queries leading to data mod...
    99+
    2023-03-13
    Spring接口 @Transactional失效的原因 @Transactional失效
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作