Spring 事务

Spring 本地事务 Spring 本地事务、Spring 事务的传播行为、本地事务失效分析 阅读详情

1.用四个词来表示事务 

ACID


2.理解Spring对事务管理的支持

Spring提供了对编码式和声明式事务管理的支持。Spring的事务管理能力超过了EJB.

Spring通过回调机制将实际的事务从事务性的代码中抽象出来。如果应用程序只使用一种持久化资源,Spring可以使用持久化机制本身所提供的

事务性支持。如果应用程序的事务跨多个资源,那么Spring会使用第三方的JTA实现来支持分布式(XA)事务。


编码式事务允许用户在代码中精确定义事务的边界,而声明式事务(基于AOP)有助于用户将操作与事务规则进行解耦。

Spring对声明式事务的支持会让人联想起EJB的容器管理事务(CMT)。他们都允许你声明式地定义事务边界。但是Spring的声明式事务要胜过CMT.

因为它允许你声明额外的一些属性,例如隔离级别和超时。


3.选择事务管理器

Spring不直接管理事务,而是提供了多种事务管理器,他们将事务管理的职责委托给JTA或者其他持久化机制所提供的平台相关的事务实现。

每个事务管理器都会充当某一特定平台的事务实现的门面。这使得用户在Spring中使用事务时,几乎不用关注实际的事务实现是什么。




3.1 jdbc事务 

如果在应用程序中直接使用jdbc来进行持久化,DataSourceTransactionManager会为你处理事务边界。为了使用DataSourceTransactionManager,你需要

使用如下的xml将其装配到应用程序的上下文定义中:


3.2Hibernate事务

如果应用程序是通过Hibernate实现的,那么你需要使用HibernateTransactionManager,对于Hibernate3,需要在Spring 上下文定义中添加如下的<bean>声明



3.3 JPA事务

如果应用程序是通过JPA实现的,需要使用JpaTransactionManager来处理事务


JPA是需要装配一个JPA实体管理工厂(javax.persistence.EntityManagerFactory接口的任意实现),JPATransactionManager将于由工厂所产生的

JPA EntityManager合作来构建事务。

除了将事务应用于JPA操作,JpaTransactionManager还支持将事务应用于简单的JDBC操作之中,这些操作所使用的DataSource与EntityManagerFactory所

使用的DataSource必须相同的。为了做到这一点,JpaTransactionManager必须装配一个JpaDialect的实现。


通过编码添加事务


为了使用TransactionTemplate,你需要实现TransactionCallback接口。

TransactionTemplate 需要注入到service中



4.声明式事务

Spring对声明式事务的支持是通过使用Spring AOP框架实现的。因为事务是在应用程序主要功能之上的系统级服务。

声明事务更好的方式是使用Spring的tx命名空间和@Transactional注解。

4.1 定义事务属性

在Spring中,声明式事务是通过事务属性来定义了。事务属性包含了5各方面

传播行为,隔离级别,回滚规则,是否只读,事务超时。


*传播行为

事务的第一个方面是传播行为。传播行为定义了客户端与被调用方法之间的事务边界。Spring定义了7种不同的传播行为

传播行为常量都在org.springframework.transaction.TransactionDefinition中定义

表中的传播分别对应了CMT管理事务所支持的传播规则。例如Spring的PROPAGATION_REQUIRES_NEW等于CMT的requiresNew.

Spring 还添加了一个CMT中没有的传播行为即PROPAGATION_NESTED



例如,如果一个方法声明了PROPAGATION_REQUIRES_NEW行为,这意味着事务边界与方法自己的边界是一样的。方法在开始执行的时候

启动一个新事务并在方法返回或抛出异常时结束该事务。如果方法具有PROPAGATION_REQUIRED的行为,事务的边界取决于是否已经有事务正在运行


*隔离级别

声明式事务的第二个维度就是隔离级别(isolation level)。隔离级别定义了一个事务可能受其他并发事务影响的程度。另一种考虑隔离级别的方式就是将其想象成事务

对于事务性数据的自私程度。

在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务。并发,虽然是必须的,但可能会导致以下问题





在理想情况下,事务之间是完全隔离的,从而可以防止这些问题的发生。但是完全隔离会导致性能问题,因为它通常会涉及锁定

数据库中的记录(有时候甚至是整张表),侵占性的锁定会阻碍并发性,要求事务互相等待以完成各自的工作。

考虑到完全的隔离会导致性能问题,而且不是所有的应用程序都需要完全隔离,所以有时候应用程序需要在事务上有一定的灵活性。因此,就会有

多种隔离级别


隔离级别都在org.springframework.transaction.TransactionDefinition接口中以常量的方式进行了定义。

ISOLATION_READ_UNCOMMITTED是最高效的事务隔离级别,但是事务隔离的程度最低,事务可能会导致脏读,不可重复读以及幻读。另一个极端则是

ISOLATION_SERIALIZABLE能阻止所有的隔离问题却是最低效的。

注意并不是所有的数据源都支持所有的隔离级别。


*只读



*事务超时


*回滚规则



4.2定义注解驱动的事务


tx命名空间提供了<tx:annotaton-driven />可以通过transaction-manager属性来指定特定的事务管理器

<tx:annotaton-driven />元素高速Spring检查上下文中所有的Bean并查找使用@Transactional注解的Bean,而不管这个注解是用在类还是方法上。

对于每个@Transactional注解的Bean <tx:annotaton-driven />会为它添加事务通知。通知事务的属性通过@Transactional注解的参数来定义的。


Spring事务和MySQL事务详解面试 文章目录数据库事务事务是什么事务的四大特性MySQL事务隔离级别查看MySQL当前事务隔离级别MySQL默认操作模式为自动提交模式JDBC处理事务Spring事务Spring的事务传播PROPAGATION_REQUIREDPROPAGATION_SUPPORTSPROPAGATION_MANDATORYPROPAGATION_REQUIRES_NEWPROPAGATION_NOT_SUPPORTEDPROPAGATION_NEVERPROPAGATION_NESTEDSpring事务的隔离级别Spring 阅读详情

相关推荐

【MATLAB强化学习工具箱】学习笔记--在Simulink环境中训练智能体Create Simulink Environment and Train Agent

Simulink中便于搭建各类动力学与控制模型,通过将原有的控制器替换为AI控制器,可以方便使用已有模型,提供增量效果。 本节的重点是如何引入Simulink模型作为env,其他的内容在之前的文章中已有说明。 以水箱模型watertank为例,如下图所示: 采用PI控制器,控制效果如下所示: 将此PI控制器替换为神经网络控制器后,系统架构如下图所示: 具体替换策略如下所示: (1)删去PID控制器; (2)增加RL Agent模块; (3)观测器模块: 观测向量为:,其中...

bear_miao的博客 1万+

【Spring】Spring事务和事务传播机制

Spring事务和事务传播机制

2403_87459748的博客 2829

当 AI + 可视化融入消防:开启智能消防新时代

总结来说,AI + 可视化技术融入消防,开启了智能消防新时代。它以精准预警、高效救援和全面资源管理,革新消防工作方式。从前期规划到系统搭建,再到后期运维,每个环节都为提升消防能力奠定基础。尽管面临技术成本、数据安全和人员适应等挑战,但随着技术发展和应用推广,这些问题将逐步解决。相信在 AI + 可视化助力下,消防领域将不断进步,为人们创造更安全生活环境,有效抵御火灾威胁。

2401_87844374的博客 1220

Spring之事务详解

1.Spring事物的定义: 事务,就是一组操作数据库的动作集合。事务是现代数据库理论中的核心概念之一。 如果一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事务。 当所有的步骤像一个操作一样被完整地执行,我们称该事务被提交。 由于其中的一部分或多步执行失败,导致没有步骤被提交,则事务必须回滚到最初的系统状态。 2. spring七个事务传播属性: PROP......

上善若泪 1万+

西威SIEI变频器与电梯主板及驱动板原理图解析与详解(共二十九页原厂PDF图纸)

通过本文的分析,可以了解到西威变频器的技术特点、维修需求以及相关的图纸获取途径。在今后的工作中,维修人员需要充分了解设备的电路图和原理图,掌握正确的维修技术和方法,确保设备的正常运行和延长使用寿命。对于维修人员来说,获取准确的变频器图纸是进行维修工作的基础。这些图纸包含了变频器的电路图、原理图以及相关的元件布局等信息,是维修人员了解设备工作原理、确定维修步骤的重要依据。西威变频器是一种高效、可靠的电机控制设备,广泛应用于电梯、空调、风机等领域的电机控制中。目前,西威提供的维修图纸主要以PDF格式为主。

lXSqtACEzg的博客 1113

利用makehumancommunity导入人体模型到COMSOL里(需要solidwork)

#makehumancommunity #solidwork #COMSOL

qq_41227634的博客 2158

Spring事务

spring事务

chenchenchencl的博客 2186

从零到一:手把手教你用DJI E-Port套件为M350 RTK开发第三方负载(PSDK V3实战)

本文详细介绍了如何使用DJI E-Port套件为M350 RTK开发第三方负载,涵盖硬件配置、开发环境搭建及实战应用。通过PSDK V3开发套件,开发者可以高效实现负载与无人机的通信,适用于电力巡检等工业场景,提升开发效率与系统稳定性。

weixin_26841743的博客 702

Spring事务专题(四)Spring中事务的使用、抽象机制及模拟Spring事务实现

点击蓝色“程序员DMZ ”关注我哟 好看记得加个“星标”哈! 前言 本专题大纲如下: 事务专题大纲 「对于专题大纲我又做了调整哈,主要是希望专题的内容能够更丰富,更加详细」,本来是想在源码分析的文章中附带讲一讲事务使用中的问题,这两天想了想还是单独写一篇并作为事务专题的收尾篇,也是我Spring源码专题的收尾篇。 本文大纲如下: Spring事务应用大纲 在看这篇文章,以及下篇源码分析的文章我希望你对Spring AOP以及有充分的了解,不然一些细节问题你可能看不明白,关于Spring AOP如果

做一个认真的程序员 3070

Laravel 结合 jwt-auth 实现无状态 API 认证(实战解析)

本文详细解析了如何在Laravel框架中结合jwt-auth实现无状态API认证,包括JWT的优势、环境搭建、Token签发与刷新、API路由保护等实战内容。通过具体代码示例和优化技巧,帮助开发者高效解决跨域认证问题,提升系统安全性。

weixin_29315569的博客 210

27、单阶段目标检测算法(SSD):原理、训练与实战

本文详细介绍了单阶段目标检测算法SSD的原理、训练方法与实战应用。内容涵盖SSD的核心机制,如特征图离散化、边界框预测、损失函数设计及难负样本挖掘,并通过使用dlib车辆数据集从零开始训练SSD模型的完整流程展示了实际操作步骤。文章还讨论了训练中的关键问题,如边界框坐标处理和‘忽略区域’缺失的影响,提供了模型评估与优化策略,包括超参数调整、基础网络替换和数据增强。最后总结了SSD的优势与局限性,并展望了未来目标检测技术的发展方向。

nice1的博客 505

Spring 事务详解

上一章我们介绍了Spring AOP,今天来讲解Spring事务什么是事务?为什么需要事务?Spring 中事务的实现1.编程式事务2.声明式事务@Transactional详解1. REQUIRED(默认值)3.NEVER4.Nested如果各位对文章的内容感兴趣的话,请点点小赞,关注一手不迷路,讲解的内容我会搭配我的理解用我自己的话去解释如果有什么问题的话,欢迎各位评论纠正 🤞🤞🤞N_0050-优快云博客java SE_N_0050的博客-优快云博客。

N_0050的博客 2824

视频流推理的工程架构:YOLO模型如何做到单卡处理16路1080P实时流?

<think>我们只需要根据内容生成摘要,不超过150字。内容是关于YOLO模型单卡处理16路1080P实时流的技术分析,包括方案对比、架构设计等。摘要要简洁,突出关键点。</think>本文深度解析了YOLO模型单卡处理16路1080P实时流的技术方案,对比EagleEye、TensorRT+DeepStream、华为CANN及RK3588四条路线,重点介绍流水线架构、并发模型及显存优化,指出消费级显卡(如RTX 4090)即可实现高并发智能视觉分析。

2601_95807009的博客 162

Spring事务和事务传播机制

本章介绍了Spring 事务与事务传播机制,与MySQL中的事务有相同之处,也有不同之处

matexiang的博客 1954

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Spring框架】Spring事务的原理

本文将详细讲解Spring事务管理地底层原理,让你彻底搞懂Spring事务的运行机制。

小七的博客 3294

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【Spring】事务总结

事务是逻辑上的一组操作,要么都执行,要么都不执行。Guide 哥:大家应该都能背上面这句话了,下面我结合我们日常的真实开发来谈一谈。我们系统的每个业务方法可能包括了多个原子性的数据库操作,比如下面的方法中就有两个原子性的数据库操作。这些原子性的数据库操作是有依赖的,它们要么都执行,要不就都不执行。事务能否生效数据库引擎是否支持事务是关键。比如常用的 MySQL 数据库默认使用支持事务的innodb引擎。但是,如果把数据库引擎变为myisam,那么程序也就不再支持事务了!

2301_79456272的博客 1265

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【Spring事务】

Spring事务是对数据库事务的封装,确保逻辑工作单元的一系列操作要么全部成功,要么全部失败。事务具有四大特性:原子性、一致性、隔离性和持久性。Spring事务通过PlatformTransactionManager实现事务的提交和回滚,支持多种隔离级别(如读未提交、读已提交、可重复读、串行化)和传播行为(如REQUIRED、SUPPORTS、REQUIRES_NEW等)。此外,Spring事务允许自定义回滚规则、设置只读事务、以及通过编程式和声明式两种方式管理事务。声明式事务通过AOP实现,配置灵活且不侵

qq_46005538的博客 1236

【Spring】_Spring事务与事务传播机制

由于id作为主键采取了自增方式,而此时第二次执行insert操作后id为2,说明第一次执行insert也执行成功,但事务回滚,故数据表user_info中又删除了id=1的用户信息;现已验证,使用@Transactional进行编程式事务管理时,当接口内部抛出运行时异常,或接口内部抛出异常并未捕获、抛出异常捕获但未正确处理时,都会导致事务回滚。编程式事务与声明式事务的不同体现在controller中,不同的事务类型将创建不同的Controller,稍后完成controller对service的调用。

m0_63299495的博客 1354

Spring事务详解

我们的系统中,每个业务方法都可能包括了多个原子性的数据库操作,就比如下面的addUser()方法中,就有两个原子性的数据库操作。这些原子性的数据库操作是有依赖的,要么都执行,要么都不执行。玩意这两个操作之间突然出现错误,比如银行系统崩溃或者网络故障,导致小明的余额减少,但是小红的余额没有增加,这样就不对了。事务就是要保证这两个关键操作要么都成功,要么都失败。另外,数据库事务的ACID四大特性是事务的基础。

xg_960的博客 1334

【Spring】Spring事务

1.事务的概念 事务是一些sql序列的集合, 是多条sql, 作为一个整体执行。 mysql执行事务 beginTransaction 开启事务 insert into student() values..... select * from student where id=1001 update school set name=xxx where id=1005 endTransaction 事务结束 什么情况下需要使用事务? 一个操作需要多条(2条或2条以上的sql)sql语句一起完成, 操作才能

爱写bug的王六六 1624
上一篇: spring 数据库
下一篇: Spring rest
GeoJava
博客等级 码龄19年 3粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值