Spring事务的传播特性(面试考点)

Spring系列面试题整理(一) Transactional(rollbackFor = Exception.class) // 异常时回滚(默认仅RuntimeException回滚)System.out.println("环绕通知:方法执行耗时" + time + "ms");return Result.fail("空指针异常:" + e.getMessage());return Result.fail("系统异常:" + e.getMessage());// 切入点:匹配com.example.service包下所有类的所有方法。 阅读详情

1.Spring 事务管理
1.1.Spring 事务概述
事务是一个不可分割的逻辑工作单元,具备ACID特性,实际工作中可借助Spring进行事务管理。
事务四大特性:ACID
1)原子型(一个事务中的多个操作要么都成功要么都失败)
2)一致性(例如存钱操作,存之前和存之后的钱数应该是一致的)
3)隔离性(事务与事务应该是相互隔离的)
4)持久性(事务一旦提交,数据要持久保存)

Spring提供了两种事务管理方式, 编程式事务和声明式事务。编程式事务指的是通过编码方式实现事务控制;声明式事务基于 AOP,将具体业务逻辑与事务处理逻辑解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。
Spring中声明式事务处理有两种方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于@Transactional 注解的方式。

本讲重点讲解实际项目中最常用的声明式事务管理,以简化事务的编码操作。

1.2.Spring事务案例分析
例如现有两个订单操作,需要更新库存。

这里写代码片

当库存充足时,两个事务都可以满足,当不满足时就需要回滚

这里写代码片

 


假如采用编程方式控制事务:(业务层)
Connection conn=DbUtil.getConnection();
conn.setAutoCommit(false);
try{
….
dao.updateObject(….)
dao.deleteObject(…)

conn.commit();
}catch(SQLException e){
conn.rollback();

}finally{
conn.close();
}

编程式事务处理,代码量比较大,侵入性比较高,维护相对困难。

实际项目中通常会采用代理方式进行事务处理:
1)基于Spring AOP实现(底层是基于JDK动态代理和CGLIB实现)
2)基于JDK 动态代理
3)基于CGLIB 代理

2.Spring 声明式事务处理

2.1.基于注解方式实现


Step1:在spring配置文件中启用事务注解

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
</bean>
<!--设置注解驱动的事务管理  -->
<tx:annotation-driven transaction-manager="txManager"/>

Step2:在类或方法中使用@Transaction注解应用事务。

name    当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器。
propagation    事务的传播行为,默认值为 REQUIRED。
isolation    事务的隔离度,默认值采用 DEFAULT。
timeout    事务的超时时间,默认值为-1。如果超过该时间限制但事务还没有完成,则自动回滚事务。
read-only    指定事务是否为只读事务,默认值为 false;为了忽略那些不需要事务的方法,比如读取数据,可以设置 read-only 为 true。
rollback-for    用于指定能够触发事务回滚的异常类型,如果有多个异常类型需要指定,各类型之间可以通过逗号分隔。
no-rollback- for    抛出 no-rollback-for 指定的异常类型,不回滚事务。

说明:@Transactional 注解可以用在方法上也可以添加到类级别上。当把@Transactional 注解放在类级别时,表示所有该类的公共方法都配置相同的事务属性信息。当类级别配置了@Transactional,方法级别也配置了@Transactional,应用程序会以方法级别的事务属性信息来管理事务,换言之,方法级别的事务属性信息会覆盖类级别的相关配置信息。

2.2.基于xml方式实现
在配置文件中通过xml配置方式实现声明式事务管理。
配置事务管理器
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
</bean>

配置事务处理方式

<tx:advice id="txAdvice"  transaction-manager="txManager">
<tx:attributes>
<tx:method name="*"
propagation="REQUIRED"
isolation="READ_COMMITTED"
timeout="-1"
read-only="false"
rollback-for="java.lang.Throwable"
no-rollback-for=”NoTransactionException"/>
</tx:attributes>
</tx:advice>


<aop:config>
<aop:pointcut id="operation" expression="execution(* beans.service..*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut="operation"/>
</aop:config>

课堂练习:

Step01:定义事务管理器
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

定义事务策略

<tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!--定义查询方法都是只读的 -->
            <tx:method name="query*" read-only="true" />
            <tx:method name="find*" read-only="true" />
            <tx:method name="get*" read-only="true" />

            <!-- 主库执行操作,事务传播行为定义为默认行为 -->
            <tx:method name="save*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="delete*" propagation="REQUIRED" />

            <!--其他方法使用默认事务策略 -->
            <tx:method name="*" />
</tx:attributes>
    </tx:advice>


<aop:config>
        <!-- 定义切面,所有的service的所有方法 -->
        <aop:pointcut id="txPointcut"
 expression="execution(* com.jt.sys.service.*.*(..))" />
        <!-- 应用事务策略到Service切面 -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>


3.Spring事务增强

3.1.Spring 事务的传播特性
事务传播特性:事务方法之间相互调用时,事务的传播方式.

UE5实现物体高亮描边效果(含UE相关源码浅析) UE5实现物体高亮描边效果 阅读详情

相关推荐

VINS-Mono 时延估计论文翻译

Online Temporal Calibration for Monocular Visual-Inertial Systems 摘要 精确的状态估计是机器人导航、自主驾驶、虚拟现实和增强现实等各种智能应用的基础模块。视觉惯性融合是近年来流行的六自由度状态估计技术。记录不同传感器测量值的时刻对系统的鲁棒性和准确性至关重要。在实践中,每个传感器的时间戳通常会受到触发和传输延迟的影响,从而导致不同传感器之间的时间偏差(时间偏移)。这种时间偏移严重影响传感器融合的性能。为此,我们提出了一种标定视觉和

weixin_39061796的博客 1255

【Spring经典面试题】Spring事务的传播机制

Spring事务的传播机制和使用场景

qq_64656621的博客 3332

Win11专业版破解RDP限制:实现多用户远程桌面协同办公

本文详细介绍了如何在Windows 11专业版上破解RDP限制,实现多用户远程桌面协同办公。通过使用RDPWrap工具,用户可以绕过微软的授权限制,允许多个用户同时登录同一台电脑,提高硬件利用率和团队协作效率。文章包含详细的安装配置步骤、性能优化技巧及常见问题解决方案,适用于需要远程协作的办公场景。

weixin_33806300的博客 469

【面试普通人VS高手系列】Spring中事务的传播行为有哪些?

一个工作了2年的粉丝,私信了一个比较简单的问题。 说: “Spring中事务的传播行为有哪些?” 他说他能记得一些,但是在项目中基本上不需要配置,所以一下就忘记了。 结果导致面试被拒绝,有点遗憾! ok,关于这个问题,看看普通人和高手的回答。 部分高手面试文档已整理,需要的小伙伴可以扫描添加下方二维码 普通人: 嗯。。。。。。。。。 高手: 对于这个问题,需要从几个方面去回答。 首选, 所谓的事务传播行为,就是多个声明了事务的方法相互调用的时候,这个事务应该如何传播。 比如..

跟着Mic学架构 447

网络安全 —— 实验(基于华为eNSP模拟器)

8. 实验八 —— 通过路由的远程管理(基于实验七的基础配置)8. 实验八 —— 通过路由的远程管理(基于实验七的基础配置)6. 实验六 —— 交换机的远程控制(直接控制和间接控制)6. 实验六 —— 交换机的远程控制(直接控制和间接控制)5. 实验五 —— 将交换机作为PC端通过交换机相连。5. 实验五 —— 将交换机作为PC端通过交换机相连。4. 实验四 —— 两个PC机通过两台交换机相连。2. 实验二 —— 两个PC机通过交换机相连。2. 实验二 —— 两个PC机通过交换机相连。

这个家伙看起来很懒,只想把你留下来哦 9345

免费搞定DWG转DXF:ODA File Converter保姆级配置指南(附常见报错解决)

本文详细介绍了如何使用ODA File Converter免费工具实现DWG到DXF的格式转换,包括环境配置、命令行参数解析、编程集成方案及常见问题解决。特别针对网络访问异常、参数配置等实际痛点提供应对策略,帮助用户高效完成工程设计文件的格式转换。

weixin_29291185的博客 6061

Spring面试题:Spring事务的传播特性与四大特性

四大特性:1.原子性:事务最基本的操作单元,要么全部成功,要么全部失败2.一致性:指的是在一个事务的执行之前和执行之后数据库都必须处于一致性的状态。3.隔离性:指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。4.持久性:指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。传播特性:1.propagation_requierd:如果当前没有事务,就新建一个事务,如果已经存在一个事务,那就加入到这个事务中,这是Spring默认的选择2.propagation_s

m0_68775394的博客 506

代码实现 —— 基于 STM32 的可见光通信系统课程设计

基于STM32F103ZET6,源码如需移植,需要修改定时器捕获通道引脚,及定时器,如果你也有这个课设任务,希望对你有所帮助。

不善挽留 1万+

谈谈面试题之Spring的事务传播机制

多个事务方法相互调用时,事务如何在这些方法间传播 方法A是一个事务的方法,方法A执行过程中调用了方法B,那么方法B有无事务以及方法B对事务的要求不同都会对方法A的事务具体执行造成影响,同时方法A的事务对方法B的事务执行也有影响,这种影响具体是什么就由两个方法所定义的事务传播类型所决定。 ...

阿武刚巴得 1258

分子对接时,如何批量处理小分子受体和蛋白配体,让他们快速转化为pdbqt格式,然后用vina跑?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1222

YOLOv9实战:刀具磨损实时监控从摄像头到预测性维护(附车间落地代码)

摘要: 本文针对制造业刀具磨损监控痛点,提出基于YOLOv9的实时视觉检测方案。通过工业相机采集刀具图像,结合图像预处理(去油污、增强对比度)和深度学习模型,实现磨损等级分类与寿命预测。系统集成硬件选型(抗油污相机、红色环形光源)、数据增强(旋转、噪声模拟)及预测性维护(PLC联动),实测刀具利用率提升30%,工件报废率降至0.5%以下。详解车间部署、模型训练到系统落地的全流程,附代码与避坑指南,为工业视觉项目提供实战参考。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 543

【Spring学习34】Spring事务(4):事务属性之7种传播行为

事务传播行为什么叫事务传播行为?听起来挺高端的,其实很简单。 即然是传播,那么至少有两个东西,才可以发生传播。单体不存在传播这个行为。事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。 例如:methodA事务方法调用methodB事务方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个

程序老兵的博客 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【Spring全家桶】Spring Framework核心:事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景(附《思维导图》+《面试高频考点清单》)

Spring Framework事务管理以ACID为基石,涵盖隔离级别、传播行为、@Transactional原理及失效场景。通过AOP动态代理实现声明式事务,支持灵活配置与最佳实践,保障数据一致性与系统可靠性。

小江的记录本 476

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

现在Java面试一般会问哪些Spring相关问题?

2025也快要结束了,不知道大家面试的时候有没有被问到过Spring相关问题(循环依赖、事务、生命周期、传播特性、IOC、AOP、设计模式、源码)?

weixin_50205273的博客 169

Java面试高频考点与核心知识点精讲

可以快速验证代码示例,其内置的Java环境支持直接运行各类算法演示,无需本地配置开发环境。对于需要展示的面试项目,还能一键生成可交互的在线Demo,特别适合动态演示集合操作、线程并发等抽象概念。

ThunderstormFalcon78的博客 648

Spring全套面试题

本文整理了Spring框架的核心面试题,涵盖IOC、AOP、事务管理等核心概念。主要内容包括:Spring框架的基础介绍、IOC容器的实现原理、依赖注入方式对比、AOP的实现机制及通知类型、动态代理技术差异,以及事务管理的ACID特性。文章系统梳理了Spring的核心模块和功能,从基础概念到进阶原理,帮助开发者全面掌握Spring知识体系,适用于面试准备和日常学习参考。(149字)

J_liaty的博客 1053

java面试题目以及答案一

如果没有同时出现using where,表明索引用来读取数据而非执行查找动作 覆盖索引(Covering Index): 理解方式1:SELECT的数据列只需要从索引中就能读取到,不需要读取数据行,MySQL可以利用索引返回SELECT列表中 的字段,而不必根据索引再次读取数据文件,换句话说查询列要被所建的索引覆盖 理解方式2:索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此他不必读取整个行。在随后的查询中,第一个事务(T1)就会发现多了一些原本不存在的记录。

m0_58115725的博客 962

spring大厂面试题梳理整理

标准答案:① IOC(控制反转):将对象的创建权、依赖管理从业务代码转移到 Spring 容器,反转了传统 “开发者手动 new 对象” 的控制逻辑,核心是解耦;② DI(依赖注入):是 IOC 的具体实现方式,Spring 容器在创建 Bean 时,自动将其依赖的其他 Bean 注入到当前 Bean 中(如属性、构造方法),无需开发者手动设置依赖。DI 是手段,IOC 是目的,Spring 通过 DI 的方式实现了 IOC 的核心思想。考点解析。

hyh1795844373的博客 668

Java面试题库:深度解析核心考点与高频问题

Java作为企业级开发的主流语言,其技术栈的快速迭代对开发者提出了更高要求。从JVM原理到并发编程,再到Spring框架的深度应用,理解底层机制是应对技术面试的关键。本文聚焦Java面试中的高频考点,包括集合扩容优化、HashMap加载因子设计、虚拟线程性能对比等核心问题,并结合实际场景如电商订单流程编排、GraalVM原生镜像兼容性等实战案例,帮助开发者系统掌握知识体系。通过分阶段学习策略和记忆技巧,提升从基础到架构的面试应对能力,特别适合准备中高级Java岗位的求职者。

weixin_30298497的博客 1070

Spring速成笔记:Java程序员面试突击必刷!

大多数Java程序员Spring框架还没有一个清楚的认知。拿Spring来说,现在面试面试官一般会直接问:谈一下你对Spring的理解?不会像以前的面试一样直接给你具象出某一个具体的点,而是给你抛出一个很大的范围,然后根据你回答的东西再去扣细节。什么循环依赖、事务、生命周期、传播特性、IOC、AOP、设计模式、源码你都得说出个所以然来。

weixin_50205273的博客 220

某游戏大厂Java面试指南:Spring、集合与语言特性深度解析 (三)

本文总结了游戏大厂Java后端面试的核心知识点,包括Spring框架、集合机制和Java语言特性。重点解析了Spring Bean的生命周期、线程安全问题、事务机制,以及HashMap和LinkedHashMap的使用场景和优化策略。同时介绍了JDK8新特性、Java语言特性(封装、继承、多态)以及与C++的对比。文中强调了理解设计原理的重要性,而不仅仅是死记答案,为面试者提供了全面而深入的准备方向。

qq_33665793的博客 1080

Spring速成笔记:源码深入解析!

金三银四到了,不知道大家最近面试的时候有没有被问到过Spring相关问题(循环依赖、事务、生命周期、传播特性、IOC、AOP、设计模式、源码)?

weixin_50205273的博客 178

2026年Java面试高频题库与核心考点解析

Java并发编程中的ConcurrentHashMap实现原理从JDK8开始采用CAS+synchronized机制,取代了早期的分段锁设计,这反映了Java技术的持续演进。理解JVM内存模型和线程安全机制是Java工程师的核心能力,尤其在微服务架构和分布式系统中,这些知识直接影响系统性能和稳定性。本文基于最新面试趋势,整理了包括ThreadLocal内存泄漏防范、CompletableFuture异步编程、Spring循环依赖解决方案等高频考点,特别适合准备跳槽或系统复习的开发者。通过真实场景案例和工具链

weixin_33968104的博客 315

Spring速成笔记:Java初学者进阶必刷!

金三银四也过,不知道大家面试的时候有没有被问到过Spring相关问题(循环依赖、事务、生命周期、传播特性、IOC、AOP、设计模式、源码)?

weixin_50205273的博客 127

JAVA高级工程师-面试经历(含面试问题及解答)

经过了几个公司的面试,谈谈我这次找工作的面试经历。工作快五年了,所以给自己定位是找一份Java高级工程师的工作。由于疫情原因基本都是先电话面试(PS:更多的原因是me在上海,想要找重庆或成都的工作)。再废话一句,今年真的能不换工作就不换工作吧,因为基本都会被面试官压制。Java高级工程师的岗位对应聘者的任何一门技术都必须要求知晓其原理,并能够针对性的提出相应的改进方案。

2509_93957884的博客 888

面试八股文整理

Java基础知识点摘要: 基本类型与包装类型区别:基本类型存储在栈内存,有默认值;包装类型存储在堆内存,默认值为null。包装类型可用于泛型,但性能较低。比较时需注意==比较引用地址,equals比较值。 String/StringBuffer/StringBuilder:String不可变,每次操作生成新对象;StringBuffer线程安全但性能较低;StringBuilder非线程安全但性能最佳。 Java 8到17新特性:包括密封类、switch表达式、文本块、Records类、模式匹配等,增强了语

weixin_74986001的博客 537
下一篇: 为什么需要使用dubbo,以及使用方法
秃头选拔赛世界先生
博客等级 码龄9年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值