Spring事务十种失效场景

首先我们要明白什么是事务?它的作用是什么?它在什么场景下在Spring框架下会失效?

事务:本质上是由数据库和程序之间交互的过程中的衍生物,它是一种控制数据的行为规则。有几个特性

1、原子性:执行单元内,要么都执行,要么都不执行,不能说执行一半,剩下一半不执行了

2、一致性:意味着一旦发生数据变化,在数据执行单元内,要么都成功,要么数据都回滚到在单元内操作之前的数据。

3、隔离性:并发访问时,每个人拿到的事务id是不一致的,而每个人对数据的操作是相互隔离的,这个比较深奥,后面单独再讲讲数据库的隔离级别

4、持久性:表示的是事务一旦提交,对数据库的影响是永久的

正因为有了事务控制,我们才能对数据正确的处理,查阅,但是如果用不好事务,也会给我们的数据造成预期之外的结果。

下面我们说一下在Spring框架中哪些场景我们使用@Transactional会失效


1、事务未被Spring容器管理

     例如实现类未加@Service注解,没有注入到Spring容器

2、事务方法被final修饰

      会导致Spring生成的代理类无法重写该方法,因而导致事务失效

3、事务管控的方法非public修饰

     本质还是由于Spring生成的代理类无法访问该方法,权限不足

4、同类中方法互相调用

    A调用B方法,A未被事务注解管控,会导致B事务也失效

5、设定的事务传播类型不支持事务

    如果设定的事务传播类型@Transactional(propagation= Propagation.NOT_SUPPORTED)不支持事务,则事务也会失效

6、异常被吞噬

      程序异常未抛出,被catch,事务会感知不到,从而事务失效

7、数据库不支持事务

    数据库本身不支持事务,如mysql存储引擎为Myisam就不支持事务

8、项目未配置开启事务

    未配置Spring事务管理器,像@EnableTransactionManagement注解未配置,或者

9、错误的事务传播特性

        如果设置了Propagation.NEVER,这种传播特性是不支持事务的,如果存在事务则报错

10、多线程调用

        事务管控的方法开启多线程调用,事务id不在当前线程,则是无法事务回滚的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/39853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pjsip环境搭建、编译源码生成.lib库

使用平台: windows qt(5.15.2) vs(2019)x86 pjsip版本以及第三方库使用 pjsip 2.10 ffmpeg4.2.1 sdl2.0.12pjsip源码链接: https://github.com/pjsip/pjproject源码环境配置 首先创建两个文件夹,分别是include、lib其中include放置ff…

p2p、分布式,区块链笔记: 通过libp2p的Kademlia网络协议实现kv-store

Kademlia 网络协议 Kademlia 是一种分布式哈希表协议和算法,用于构建去中心化的对等网络,核心思想是通过分布式的网络结构来实现高效的数据查找和存储。在这个学习项目里,Kademlia 作为 libp2p 中的 NetworkBehaviour的组成。 以下这些函数或…

Java8 - Stream API 处理集合数据

Java 8的Stream API提供了一种功能强大的方式来处理集合数据,以函数式和声明式的方式进行操作。Stream API允许您对元素集合执行操作,如过滤、映射和归约,以简洁高效的方式进行处理。 下面是Java 8 Stream API的一些关键特性和概念&#xff…

windows安装Gitblit还是Bonobo Git Server

Gitblit 和 Bonobo Git Server 都是用于托管Git仓库的工具,但它们是基于不同平台的不同软件。 Gitblit 是一个纯 Java 写的服务器,支持托管 Git,Mercurial 和 SVN 仓库。它需要 Java 运行环境,适合在 Windows、Linux 和 Mac 平台…

Android 输入系统 InputStage

整体流程如上所说,简要归纳如下: 输入法之前的处理 输入法处理 输入法之后处理 综合处理 InputStage将输入事件的处理分成若干个阶段(Stage), 如果当前有输入法窗口,则事件处理从 NativePreIme 开始,否…

SpringBoot MongoTemplate使用详解

前面文章讲了 SpringBoot整合MongoDB JPA使用:https://blog.csdn.net/qq_42402854/article/details/139973336 在项目中,通常会 JPA语法与 MongoTemplate两者结合使用,特别是针对复杂动态条件查询时,MongoTemplate更加友好。 Spr…

主流国产服务器操作系统技术分析

主流国产服务器操作系统 信创 "信创",即信息技术应用创新,作为科技自立自强的核心词汇,在我国信息化建设的进程中扮演着至关重要的角色。自2016年起步,2020年开始蓬勃兴起,信创的浪潮正席卷整个信息与通信技…

GNeRF代码复现

https://github.com/quan-meng/gnerf 之前一直去复现这个代码总是文件不存在,我就懒得搞了(实际上是没能力哈哈哈) 最近突然想到这篇论文重新试试复现 一、按步骤创建虚拟环境安装各种依赖等 二、安装好之后下载数据,可以用Blen…

virtualbox+Ubuntu部分窗口显示错乱

如下图: 窗口标题显示错乱,跟一般乱码不一样。 解决办法: 在virtualbox设置中,显示选项卡,取消勾选启用3D加速 也可参考此链接:linux ubuntu 中vscode中央窗口显示出现异常/显示错误_开发工具-CSDN问答

打卡第一天

今天是参加算法训练营的第一天,希望我能把这个训练营坚持下来,希望我的算法编程题的能力有所提升,不再面试挂了,面试总是挂编程题,记录我leetcode刷题数量: 希望我通过这个训练营能够实现两份工作的无缝衔接…

自动化任务工具 -- zTasker v1.94 绿色版

软件简介 zTasker 是一款功能强大的自动化任务管理软件,以其简洁易用、一键式操作而著称。软件体积小巧,启动迅速,提供了超过100种任务类型和30多种定时/条件执行方法,能够满足用户在自动化方面的多样化需求。 zTasker 支持定时任…

从全连接到卷积

一、全连接到卷积 1、卷积具有两个原则: 平移不变性:无论作用在哪个部分,它都要有相同的作用,而不会随着位置的改变而改变 局部性:卷积核作用处,作用域应该是核作用点的周围一小部分而不作用于更大的部分 …

OBD诊断(ISO15031) 04服务

文章目录 功能简介ISO 9141-2、ISO 14230-4和SAE J1850的诊断服务定义1、清除/重置与排放相关的诊断信息请求消息定义2、请求与排放相关的DTC响应消息定义3、报文示例 ISO 15765-4的诊断服务定义1、请求与排放相关的DTC请求消息定义2、请求与排放相关的DTC响应消息定义3、否定响…

专题二:Spring源码编译

目录 下载源码 配置Gradle 配置环境变量 配置setting文件 配置Spring源码 配置文件调整 问题解决 完整配置 gradel.properties build.gradle settiings.gradel 在专题一: Spring生态初探中我们从整体模块对Spring有个整体的印象,现在正式从最…

基于Hadoop平台的电信客服数据的处理与分析③项目开发:搭建基于Hadoop的全分布式集群---任务6:安装并配置Hadoop

任务描述 项目的运行环境为基于Hadoop的全分布式模式集群。 任务的主要内容为安装Hadoop分布式集群环境。 任务指导 Hadoop集群需要整个集群所有节点安装的Hadoop版本保持一致,并且拥有相同的配置 具体配置步骤如下: 1. 解压缩Hadoop的压缩包 2. …

AI产品经理需要哪些必备技能?如何成为AI产品经理?

1.AI产品经理是什么 回答这个问题前我们首先得理清楚什么是AI产品经理,它和传统的互联网产品经理有什么区别。 1.1 AI产品经理职责 主要职责一方面是规划如何将成熟的AI技术应用在各个领域不同场景中,提升原有场景的效率或效果等;另一方面…

在线医疗诊断平台开发教程大纲 (Java 后端,Vue 前端)—实践篇-02

第三步:创建实体类和 Mapper 文件 现在我们已经设计好了数据库表结构,接下来要使用 MyBatis 将这些表映射到 Java 对象,以便在代码中进行操作。 1. 创建实体类 在 src/main/java/<your_package>/entity 目录下 (如果没有该目录,请手动创建),创建与数据库表对应的实…

基于蜉蝣优化的聚类算法(MATLAB)

优化问题广泛存在于人们的日常生活和工程领域&#xff0c;其解决如何寻找使目标值达到最优的可行解的问题。伴随着科技发展&#xff0c;优化问题在生产调度、神经网络训练、图像处理、能源系统等领域起到举足轻重的作用&#xff0c;有助于提高系统效率。优化问题依据不同标准可…

探索Spring Boot:简化Java开发的新纪元

1. 引言 在Java开发的世界里,Spring Boot无疑是一颗璀璨的明星。自诞生以来,它以简化配置、快速开发、内嵌服务器等诸多优点迅速赢得了广大开发者的青睐。本篇博客将深入探讨Spring Boot的核心概念、特点以及其在现代Java开发中的优势,并通过详细的代码示例和实践经验,展示…

Docker安装PostgreSQL详细教程

本章教程,使用Docker安装PostgreSQL具体步骤。 一、拉取镜像 docker pull postgres二、启动容器 docker run -it --name postgres --restart always -e POSTGRES_PASSWORD=123456 -e