spring 异常 事务

最近使用JSF+Spring+OpenJPA框架开发,但是在使用spring提供的JpaTemplate进行查询时,如果数据量超过100 条,查询效率就会明显降低。由于开始时使用JPA内部的双向关联,造成各实体内部关联过多,从而影响所有的操作,因此怀疑是因为JPA的关联关系所致。但是去掉关联关系后的效果不显著。

查找spring的相关配置,发现原来关于“transactionAttributes”有问题。原来的配置如下:

〈bean id=“baseTxProxy” lazy-init=“true”class=“org.springframework.transaction.interceptor.TransactionProxyFactoryBean” scope=“singleton” abstract=“true”〉
〈property name=“transactionManager”〉
〈ref local=“transactionManager” /〉
〈/property〉
〈property name=“transactionAttributes”〉
〈props〉
〈prop key=“register*”〉PROPAGATION_REQUIRED〈/prop〉
〈prop key=“trade*”〉PROPAGATION_REQUIRED〈/prop〉
〈prop key=“cancel*”〉PROPAGATION_REQUIRED〈/prop〉
〈prop key=“save*”〉PROPAGATION_REQUIRED〈/prop〉
〈prop key=“exe*”〉PROPAGATION_REQUIRED〈/prop〉
〈prop key=“add*”〉PROPAGATION_REQUIRED〈/prop〉
〈prop key=“persist*”〉PROPAGATION_REQUIRED〈/prop〉
〈prop key=“remove*”〉PROPAGATION_REQUIRED〈/prop〉
〈prop key=“del*”〉PROPAGATION_REQUIRED〈/prop〉
〈prop key=“update*”〉PROPAGATION_REQUIRED〈/prop〉
〈prop key=“gen*”〉PROPAGATION_REQUIRED〈/prop〉
〈prop key=“finish*”〉PROPAGATION_REQUIRED〈/prop〉
〈prop key=“get*”〉PROPAGATION_REQUIRED,readOnly〈/prop〉
〈prop key=“find*”〉PROPAGATION_REQUIRED,readOnly〈/prop〉
〈prop key=“query*”〉PROPAGATION_REQUIRED,readOnly〈/prop〉
〈prop key=“select*”〉PROPAGATION_REQUIRED,readOnly〈/prop〉
〈prop key=“is*”〉PROPAGATION_REQUIRED,readOnly〈/prop〉
〈/props〉
〈/property〉
〈/bean〉

使用上述配置,在JPA打出的日志中显示每次查询时都要进行更新操作,查阅相关spring 的资料后发现transactionAttributes的各种属性的意义如下:

PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

当前所有的事务都使用“PROPAGATION_REQUIRED”属性值,并且控制事务的操作权限为只读,以保证查询时不会更新数据。根据上述定义 “PROPAGATION_REQUIRED”属性会造成为所有的操作都创建事务,从而会出现JPA的日志中查询时也会进行更新操作的现象,也就造成了效率的低下。将所有查询的操作改成事务类型为“PROPAGATION_NEVER”(不使用事务),则查询效率立即提升,但是此时担心一个问题:比如在一个saveXXX()的方法中,如果方法内部使用更新、查询、再更新的操作流程,会不会造成调用查询时,由于上述配置造成的抛出异常。

另外,如果出现

〈

prop key="myMethod"〉
PROPAGATION_REQUIRED,readOnly,-Exception〈

/prop〉
这样的配置,其中:

-Exception表示有Exception抛出时,事务回滚. -代表回滚+就代表提交

readonly 就是read only, 设置操作权限为只读,一般用于查询的方法,优化作用.


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/alex197963/archive/2009/08/11/4433531.aspx
Spring 事务嵌套和异常捕获的问题和解决方案 事务嵌套和异常捕获的问题和解决方案1. 无嵌套的正常事务2. 方法A调用带事务的方法B3. 加入异常捕获处理的事务4. 事务回滚的注意事项 1. 无嵌套的正常事务 public class C{ @Transactional public void a(){ //TODO } } 【结论】:出现异常,正常回滚。 原因: 事务的 ACID 特性中的 C,Consistency 一致性,事务内有操作失败时则数据将全部回滚到修改前的状态。 2. 方法A调用带事务 阅读详情

相关推荐

Keysight ADS新手必看:3分钟搞定TDR模拟的保姆级教程(附差分信号设置技巧)

本文为Keysight ADS新手提供TDR模拟的保姆级教程,详细介绍了从基础环境准备到差分信号设置的全流程。通过内置模板调用、待测器件连接和仿真结果解读,帮助用户快速掌握TDR模拟技术,特别包含差分信号配置技巧,提升信号完整性分析效率。

weixin_30872157的博客 200

Spring事务捕获异常后依旧回滚

前沿 一段生产事故发人深省,在Spring的声明式事务中手动捕获异常,居然判定回滚了,这是什么操作?话不多说直接上代码 @Service public class A { @Autowired private B b; @Autowired private C c; @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT) public...

weixin_64314555的博客 8632

深入浅出SSD:固态存储核心技术、原理与实战(文末赠书)

作为经典畅销书的升级版,本书在第1版的基础上新增了大量新知识(如闪存、UFS、测试、文件系统等),并改写或删减了许多过时或不适用的内容,总修改量超过60%。本书由SSD技术社区SSDFans的核心团队成员联合业界、高校SSD方面的专家共同完成,相对于第1版,内容更全面、更新,也更有深度。本书从产品、技术和应用3个维度展开,全面、详细讲解了SSD的发展历史、产品形态、工作原理、整体架构,以及各个功能模块的原理和使用,从SSD的前端接口协议到FTL算法,再到后端的闪存和纠错,以及测试,本书都有涉及。

阿玥的小博客 3126

Spring事务:为什么catch了异常,事务还是回滚了?

本文深入分析了Spring事务管理中一个常见但令人困惑的现象:即使捕获了异常,事务仍然回滚。关键点在于: 当被调用方法没有@Transactional注解时,异常被外部方法捕获,事务正常提交; 当被调用方法有@Transactional注解时,异常先被内部事务代理处理,标记事务为rollback-only,即使外部捕获异常也无法阻止回滚; 核心机制在于Spring的AOP代理和事务传播行为,特别是REQUIRED模式下内部方法会加入外部事务; 事务状态一旦被标记为rollback-only就无法撤销,最终导

shyの个人笔记 1407

ARM架构下的SLAM部署避坑指南:香橙派AIpro与D435i深度相机的实战解析

本文详细解析了在ARM架构的香橙派AIpro开发板上部署SLAM算法并与Intel D435i深度相机配合的实战经验。内容涵盖系统配置、ROS编译、驱动安装、算法优化等关键步骤,提供了具体的避坑指南和性能调优技巧,帮助开发者在嵌入式平台上高效实现实时SLAM应用。

f0g1h2的博客 983

【Python】SimpleITK使用笔记

1. 概念 1.1 nii格式 1.2 SimpleITK 1.3 SimpleITK 图像 2. 基本操作 2.1 常见属性 2.1 读取和保存图像 2.2 SimpleITK图像数据和Numpy矩阵数据之间的转换

See_Star的博客 7900

java事务异常——Spring事务异常回滚,捕获异常不抛出就不会回滚

java事务异常——Spring事务异常回滚,捕获异常不抛出就不会回滚 异常的分类: java.lang.Throwable 1.Error错误:JVM内部的严重问题。无法恢复。程序人员不用处理。 2.Exception异常:普通的问题。通过合理的处理,程序还可以回到正常执行流程。要求编程人员要进行处理。 3.RuntimeException:也叫非受检异常(unchecked exception).这类异常是编程人员的逻辑问题。应该承担责任。Java编译器不进行强制要求处理。 也就是说,这类异常再程序中,

qq_36335126的博客 4505

基于vivado实现FFT/IFFT

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、实现的功能二、配置1.调用DDS的IP核2.调用FFT的IP核三、结果分析1.调用DDS的IP核2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、实现的功能 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任

qq_45600102的博客 1万+

Spring事务管理中异常回滚知识点总结

讨论Spring哪些场景下事务失效不回滚,讨论try cache对事务的影响,总结了Spring事务相关的知识点

gzt19881123的专栏 4426

解析AI人工智能领域AI芯片的散热技术

当你用ChatGPT写代码、用AI生成高清图片时,背后的AI芯片可能正在“发高烧”——全球TOP500超算的平均功耗已突破10兆瓦,单颗GPU的峰值功耗超过700W(相当于3台家用空调同时运行)。本文将聚焦AI芯片的散热技术,覆盖从基础原理到前沿方案的全链条解析,帮助读者理解“散热为什么比算力更重要”。

AIGC应用创新大全的博客 937

怎样让你的论文看起来“像人写的”?只用三招直接去除AI味(附提示词)

当然如果你在实际使用中还有其他需求,比如降重润色、改写翻译等,也可以结合七哥的专业写作平台来辅助,这个高级学术平台已经内置了ChatGPT4o、ChatGPT4.1、Claude3.7、满血版DeepSeek-R1等AI大模型,帮你写文献综述、干课题申报、写论文等学术任务绝对每一点问题。比如我自己的一套学术写作平台,其中的“降重与润色”模块整合了多种GPTs应用,除了能帮助调整语言风格、避免雷同表达,还可以顺带降个重,对于提升学术文本的整体质量还是非常有用的。一、为什么用AI写出来的文章会有AI味?

智能AI让学术科研更容易 1690

spring中@Transactional对于事务异常的处理

spring对于事务异常的处理 //unchecked   运行期Exception   spring默认会进行事务回滚     比如:RuntimeException //checked     用户Exception     spring默认不会进行事务回滚   比如:Exception 如何改变spring的这种默认事务行为?可以通过在方法上 添加@Transacti

巨峰的专栏 1万+

SAP-ABAP:ABAP Development Tools(ADT)安装配置学习分享教程-第一篇:ADT安装前置准备与环境校验教程

ABAP Development Tools(ADT)安装配置教程摘要 本文是ADT安装系列的第一篇,重点讲解环境准备与版本校验。ADT是基于Eclipse的现代ABAP开发工具,相比传统SAP GUI提供更智能的开发体验。安装前需确认: 推荐使用Eclipse 2026-03 + Java 21组合 操作系统需Windows 10+/macOS 14+ SAP GUI版本要求Windows≥8.00/macOS≥8.10 后端系统需NetWeaver 7.31 SP04+或S/4HANA 通过java -

baidu_35680696的博客 690

Spring 事务异常 UnexpectedRollbackException

Spring 框架的默认事务传播方式是 PROPAGATION_REQUIRED (内层事务加入外层事务中)在内层事务因异常结束时, Spring 会把事务标记为“rollback-only”。这时如果外层事务 catch 捕捉了异常 e, 那么, 直到外层事务结束.Spring 发现事务已经被标记为 “rollback-only”, 外层方法却正常执行成功, 这时 Spring 就会抛出。

howeres的博客 1437

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

spring事务异常回滚

一、异常分类(从事物方面看): 1.运行时异常(uncheckException),即RuntimeException异常及其子类,如空指针异常、强转异常等,这种异常是可以写代码不捕获的,但运行时会抛出异常 2.已检查异常(checkException),即已知异常,必须处理,不处理的话是不能进行编译的,但是checkException不是一个具体的异常类型,它只是一个概念; 二、spring的事...

c614756zhang的博客 2522

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

springboot 事务 抛出异常_Spring事务方法嵌套引发的异常与问题分析

1 案例背景 由于Spring框架优秀的特性,很多java项目都会集成Spring。其中,Spring的轻量级声明式事务管理极大的简化了开发者对于事务的开发工作。 而我在最近的项目开发过程中,遇到了一个奇怪的事务异常:Transaction rolled back because it has been marked as rollback-only。 这篇案例将会对代...

weixin_28750369的博客 1825

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring如何回滚指定异常的事务?

在Spring框架中,事务管理默认仅对运行时异常和Error进行回滚,而对受检异常则不会。为了更精确地控制事务的回滚行为,可以使用@Transactional注解中的rollbackFor和noRollbackFor属性。rollbackFor属性允许指定哪些异常类型会触发事务回滚,而noRollbackFor属性则用于指定哪些异常类型不会触发回滚。这两个属性可以单独使用,也可以结合使用,以适应不同的业务需求。此外,确保异常能够被Spring事务管理器感知是事务回滚的关键,因此应避免在方法内部捕获异常而不抛

weixin_46072507的博客 535

Spring事务异常回滚

Java异常层次结构 可查的异常/检查型异常(checked exceptions) - 编译器要求必须处置的异常 除了RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。 这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。 不可

wuseyukui的专栏 2367

Spring事务Transactional异常回滚、事务传播

所谓事务的传播行为,指的就是在A方法运行的时候,首先会开启一个事务,在A方法当中又调用了B方法, B方法自身也具有事务,那么B方法在运行的时候,到底是加入到A方法的事务当中来,还是B方法在运行的时候新建一个事务?以上业务功能delete()方法在运行时,会引发除0的算数运算异常(运行时异常),出现异常之后,由于我们在方法上加了@Transactional注解进行事务管理,所以发生异常会执行rollback回滚操作,从而保证事务操作前后数据是一致的。例如:两个事务方法,一个A方法,一个B方法。

weixin_47878012的博客 2649

Spring事务异常回滚,捕获异常不抛出就不会回滚

最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了.......     为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志。但是这边情况来了,当这个方法异常时候 日志是打印了,但是加的事务却没有回滚。   例:      类似这样的方法不会回滚 (一个方法出错,另一个方法不会回滚) :  if(userSave){ try

yipanbo的专栏 13万+

SPRING 事务异常处理

可能性分析 1、没有配置事务,加入事务配置,附上spring-jdbc.xml全部配置内容 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/X...

z564005425的博客 471

事务里面捕获异常_spring 事务回滚

1、遇到的问题当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误。伪代码如下:期待的情况:发生错误之前的所有数据库保存操作都回滚,即不保存正常情况:前面的数据库操作会被执行,而发生数据库操作错误开始及之后的所有的数据保存操作都将失败。这样子应该都不是我们要的结果吧。当遇到这种情况,我们就可以使用Spring的事务解决这个问题。2、异常的一些基本知识1) 异常的架构异常的继承结...

weixin_39616880的博客 1069

spring异常与事务回滚

一、结论  Spring的事务管理默认只对出现运行期异常(java.lang.RuntimeException及其子类)进行回滚。  如果一个方法抛出Exception或者Checked异常,Spring事务管理默认不进行回滚。  关于异常的分类一下详细介绍:  1、基本概念  看java的异常结构图   Throwable是所有异常的根,java.lang.Throwabl...

靠谱的汉语 392
上一篇: java 异常 编程
下一篇: 难经6:小心,SpringAOP声明式事务的一个缺陷
kakarot_java
博客等级 码龄19年 0粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值