Spring框架学习笔记2:AOP中@Transactional参数小记以及事务传播特性

CentOS7 编译升级GCC至9.3.0 1)下载GCC9.2.0源码并解压 从GCC官方FTP下载地址可以看到GCC最新版本为9.3.0。由于官网下载速度慢,实际上用清华大学的镜像站进行下载,代码如下: wget -c /opt/tmp/ https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz #考虑到安装失败的可能性,创建一个临时文件夹来安装GCC... 阅读详情

Spring框架学习笔记2:AOP中@Transactional参数小记

Transactional介绍

@Tansactional的功能是将一个函数以一个事务的形式来对待。

 @Transactional(rollbackFor ={ArithmeticException.class})
    public void buyBook(){
        bookDao.getPrice(1);
        bookDao.updateBalance("zhangsan",100);
        int i=1/0;
        bookDao.updateStock(1);
    }

@Transaction的一些属性

/*
    *
    * propagation:传播特性:表示不同事务之间执行的关系
    * isolation:隔离级别 4种: 读未提交(read-uncommitted)
                                不可重复读(read-committed)
                                可重复读(repeatable-read)
                                串行化(serializable)
    * timeout:超时时间
    * readonly:只读事务:如果配置了只读事务,那么在事务运行期间,不允许对事务进行修改,否则抛出异常
    * 设置哪些异常不会回滚数据
    *   noRollbackFor:noRollbackFor={ArithmeticException.class}
    *   noRollbackForClassName: noRollbackForClassName={java.lang.ArithmeticException}
    * 设置哪些异常回滚:
    *   rollbackFor: rollbackFor={FileNotFoundException.class}
    *   rollbackForClassName: rollbackForClassName={java.io.FileNotFoundException}

传播特性

REQUIRED:如果有事务在运行,当前的方法就在这个事务内运行。如果没有事务在运行,就启动一个新的事务,并在自己的事务内运行。
REQUIRES_NEW:当前方法必须启动新事务,并在它自己的事务内运行,如果有事务正在运行,则应当将他挂起。
SUPPORTS:如果有事务在运行,当前的方法就运行在事务中,否则,它可以不运行在事务中。
NOT_SUPPORTED:当前的方法不应该运行在事务中,如果有运行的事务,将它挂起。
MANDATORY:当前方法必须运行在事务中,否则报错。
NEVER:当前方法不应该运行在事务中,如果有运行的事务,就会报错。
NESTED:如果有事务运行,当前的方法就在这个事务的嵌套事务内运行,否则,就启动一个新的事务,并在它自己的事务内运行。

值得注意的地方:
1、事务传播级别是REQUIRED,当checkout()被调用时(假定被另一类中commit()调用),如果checkout()中的代码抛出异常,即便被捕获,commit()中的其他代码都会roll back

2、是REQUIRES_NEW,如果checkout()中的代码抛出异常,并且被捕获,commit()中的其他代码不会roll back;如果commit()中的其他代码抛出异常,而且没有捕获,不会导致checkout()回滚

3、是NESTED,如果checkout()中的代码抛出异常,并且被捕获,commit()中的其他代码不会roll back;如果commit()中的其他代码抛出异常,而且没有捕获,会导致checkout()回滚

4、如果在本方法内调用的话,就是一个普通事务内进行普通的调用方法,没有以上的说法。

PROPAGATION_REQUIRES_NEW 启动一个新的, 不依赖于环境的 “内部” 事务. 这个事务将被完全 commited 或 rolled back 而不依赖于外部事务, 它拥有自己的隔离范围, 自己的锁, 等等. 当内部事务开始执行时, 外部事务将被挂起, 内务事务结束时, 外部事务将继续执行.
另一方面, PROPAGATION_NESTED 开始一个 “嵌套的” 事务, 它是已经存在事务的一个真正的子事务. 嵌套事务开始执行时, 它将取得一个 savepoint. 如果这个嵌套事务失败, 我们将回滚到此 savepoint. 潜套事务是外部事务的一部分, 只有外部事务结束后它才会被提交.
由此可见, PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED 的最大区别在于, PROPAGATION_REQUIRES_NEW 完全是一个新的事务, 而 PROPAGATION_NESTED 则是外部事务的子事务, 如果外部事务 commit, 嵌套事务也会被 commit, 这个规则同样适用于 roll back.

使用自己的数据跑通mmsegmentation 使用自己的数据跑通mmsegmentation,解决以下报错:1)type object 'FileClient' has no attribute 'infer_client' 2)It is expected output_size equals to 2, but got size 3 3)训练测试结果报NAN 4)KeyError: 'MyDataset is not in the dataset registry' 5)预训练模型和加载的网络结构层名有差异,unexpected key ..... 阅读详情

相关推荐

告别代码恐惧!用KRobot图形化编程,10分钟搞定Arduino巡线小车(附完整接线图)

本文介绍如何使用KRobot图形化编程工具快速搭建Arduino巡线小车,无需编写代码。从硬件准备到逻辑构建,详细讲解传感器数据处理、电机控制优化及高级功能扩展,帮助教育工作者和创客爱好者10分钟内完成项目。

weixin_30632089的博客 393

Spring(5) Spring中的事务@Trasactional

Spring(5) Spring中的事务@Trasactional

ACGkaka的博客 1992

地理空间坐标系统-不同椭球基准间的坐标转换

基于同一个椭球基准,可以构建三类地理空间坐标系:大地球面坐标系、大地空间直角坐标系、大地投影坐标系。由于坐标原点和椭球长短半径等都相同,这三类坐标系之间可以通过无损的数学方法相互之间进行转换。那么现在问题来了,不同椭球基准(在全球范围来看存在成百上千的椭球基准)之间的坐标怎么转换?比如,北京54、西安80、国家2000,特别是在我国,现在主推国家2000坐标系,那么如何将历史的测绘成果(北京54和...

技术改变世界 8336

@Tranactional 注解详解

1.实现注解事务的实现步骤 1.在xml中配置信息 <tx:annotation-driven /> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"...

大白的博客 4491

【SAP-MDG】工作流任务配置实战:从基础配置到代理分配详解

本文详细解析了SAP MDG工作流任务配置的全流程,从基础配置到代理分配的关键操作。通过实战案例和最佳实践,帮助用户掌握Configure Workflow Tasks的核心技巧,包括环境检查、代理分配、SWDD事务码使用及常见问题排查,提升主数据管理效率。

weixin_33738555的博客 248

EBS开发_离散工单创建API

--以下代码于20171213在TONY环境中实现 DECLARE     l_iface_rec    wip.wip_job_schedule_interface%ROWTYPE; --工单任务接口表     l_group_id     NUMBER;     l_returnstatus VARCHAR2(40);     l_errormsg     VARCHAR2(2000

蜗牛先生快跑的博客 2596

@Transactional注解超详细

Transactional注解是Spring框架中用于声明式事务管理的关键注解。本文将深入探讨@Transactional注解的作用、使用方式和常见属性,并结合代码实例演示其在实际项目中的应用,以帮助读者更好地理解和使用该注解。@Transactional注解是Spring框架中用于声明式事务管理的关键注解。通过使用@Transactional注解,我们可以更加方便地管理事务,保障数据的一致性和可靠性。在实际项目中,合理使用@Transactional注解可以提高「开发效率 」和代码「可维护性 」。

Wzill 3万+

DDR5 输入时钟抖动规范全解析!技术宅必看

简单说,时钟抖动就是时钟信号边沿的“颤抖”——信号本来应该在某个固定时间跳变,但实际时刻可能会前后波动。这种波动可能是随机的,也可能是确定性的。随机抖动(Random Jitter, Rj):符合高斯分布,像是你家猫咪不经意的晃动。确定性抖动(Deterministic Jitter, Dj):受限于特定周期或模式,像是邻居装修时的规律敲击声。⚠️ 注意,如果时钟抖动超出规格,DDR5可能无法正确接收或发送数据,内存错误、系统崩溃可就跟着来了!

weixin_43199439的博客 390

@Tansactional失效问题

多数据源原因造成: springboot整合mybatis后,直接使用 @EnableTransactionManagement 注解可以开启事务(引用spring-boot-starter-web包,自动开启,不需要使用@EnableTransactionManagement),然后代码中使用 @Transaction 注解即可。 我在项目中使用了neo4j和mybatis的数据源,造成@t...

小白程序员努力写代码 481

微信小程序、H5微信公众号网页JSAPI:解决报错requestMerchantTransfer:fail:internal error(使用wx.requestMerchantTransfer错误)

如何解决requestMerchantTransfer:fail:internal error,微信小程序wx.requestMerchantTransfer报错,微信公众号H5网页使用jssdk调用wx.requestMerchantTransfer报错,JSAPI调起用户确认收款报错errMsg:“requestMerchantTransfer:fail:internal error“,微信小程序/H5 调起确认收款界面,JSAPI调起用户确认收款,微信公众号(H5),用户发起提现,商家转账给用户,用户

✅ 精选推荐文章 4963

初学者入门YOLO目标检测:从懵圈到上手,这篇文章讲透所有核心(附学习路径+避坑指南)

目标:比如训练一个“检测苹果和橘子”的模型,或者“检测人脸”的模型;任务:学会用LabelImg标注数据,制作YOLO格式的数据集,用命令行训练模型;关键:不用追求高精度,能训练出一个能检测出目标的模型就行。很多初学者卡在入门阶段,不是因为智商不够,而是因为“想太多,做太少”——总觉得要把所有原理搞懂才能动手,结果越想越怕,最后放弃。先动手,再动脑。先跑通一个案例,获得成就感;再制作自定义数据集,训练简单模型;最后再回头去理解原理,优化模型。

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

Spring AOP 详解及@Trasactional

AbstractAdvisingBeanPostProcessor 针对特定注解创建代理对象模式。扩展点BeanPostProcessor 的postProcessAfterInitialization方法中检查注解是否作用在Bean上,如是则创建代理。if (!基于FactoryBean机制,对通过XML配置的FactoryBean,针对目标Bean解析所得Advicsed对象。

dreamsofa的专栏 434

jre9下载 jdk9

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

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

Spring事务和事务传播机制

2403_87459748的博客 2825

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Spring AOP 事务

容器、AOP和事务

2404_88294688的博客 1592

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Spring 事务隔离级别 事务传播特性 @Transactional使用

spring的事务处理能力,本质上是数据库提供的。 一个数据库具备事务,那么它必然支持4个特性, 事务的4大特性 原子性 一致性 隔离性 持久性 这4个特性,保证了数据库处理单事务是有保障的,正确的。更多应用处理场景下,是多事务并行出现的。同时,两个或两个以上的事务,操作同一张表,就会引起冲突。为了解决事务间交互产生的问题,数据库设置了4个隔离级别 数据库的4大隔离级别 ...

chudaxiakkk的专栏 9115

聊一聊Spring中的@Transactional注解【中】【事务传播特性】

在开发过程中,我们常常会遇到这样的问题:当你在处理复杂的业务逻辑时,如何确保每一个操作都能顺利完成,而不会因为一个小小的错误而引发一场“数据灾难”?

懒惰蜗牛的博客 1422

SpringData JPA事务管理:@Transactional注解与事务传播

Spring Data JPA的事务管理机制为企业级应用提供了强大的数据一致性保障。通过@Transactional注解,开发者可以以声明式方式定义事务边界,并通过灵活配置属性来控制事务的行为特性。事务传播行为定义了事务方法相互调用时的事务边界处理规则,而隔离级别则解决了并发事务可能导致的数据不一致问题。在实际应用中,开发者应当根据业务需求选择合适的事务配置,正确设置事务边界,避免事务嵌套导致的复杂问题,并选择适当的隔离级别平衡数据一致性和性能。

程序媛学姐的博客 2495

Spring框架中@Transactional注解事务传播行为的深度剖析与应用探究

Spring框架是一个开源的、轻量级的Java应用程序框架,在整个Java开发生态中占据着举足轻重的地位,已然成为企业级应用开发的事实标准,为开发者提供了一整套解决方案,从而简化复杂应用的开发与管理工作(深入探索Spring 2.5.6版本的核心特性与架构-优快云博客;第四篇:Spring框架:Java企业级开发的核心- 掘金)。IoC容器:这是Spring框架的关键组成部分,是一个轻量级且非侵入式的容器,用于管理应用程序里对象及其依赖关系。

不想起名字 855

Spring 事务及传播机制

摘要:Spring事务管理是企业级应用开发中确保数据一致性的核心技术。本文系统介绍了Spring事务的ACID特性、声明式与编程式实现方式,重点解析了7种事务传播机制(REQUIRED/SUPPORTS/MANDATORY/REQUIRES_NEW/NOT_SUPPORTED/NEVER/NESTED)的应用场景与实现原理。通过电商案例对比不同传播机制的特点,指出REQUIRED适合主业务链,REQUIRES_NEW适用于独立操作,NESTED用于父子事务场景。

qq_33562954的博客 1229

spring事务的面试题 —— 事务的特性、传播机制、隔离机制、注解

嵌套事务: 与REQUIRED不同, NESTED支持真正意义上的子事务, 父事务回滚会将所有子事务都回滚,子事务回滚不会引起父事务的回滚。, 常见的场景是在一个嵌套调用的方法中,外部方法和内部每个方法都添加了事务管理, 不同的传播行为配置,决定了最终是这些方法是使用同一个事务,还是在不同的事务中运行。支持当前事务,如果当前已经存在事务,就加入到事务中执行,如果当前没有事务,就新建一个事务。以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。支持当前事务,如果当前没有事务,就以非事务方式执行。

qq_64392336的博客 1958

spring(七)AOP,事务的隔离级别、传播特性、配置

SpringAOP,事务的隔离级别、传播特性、配置

qi325的博客 1538

【Spring】Spring事务传播机制

有的时候,你排查了很久,发现都没问题,但是还是不生效,然后找别人来帮你看,他上来就看了一下你用的@Transactional,发现并不是Spring中的,而是其他什么地方的,比如 javax.transaction.Transactional ,这样也会导致事务失效。private方法,只会在当前对象中的其他方法中调用,也就是会进行对象的自调用,这种情况是用this调用的,并不会走到代理对象,而@Transactional是基于动态代理实现的,所以代理会失效。2、在事务中有远程调用,就会拉长整个事务。

xueping_wu的博客 1064

JavaEE进阶(12)Spring事务和事务传播机制:事务回顾、Spring中事务的实现、@Transactional详解(用法、rollbackFor、事务隔离级别、事务传播机制)

事务回顾(什么是事务?为什么需要事务?事务的操作)、Spring中事务的实现(Spring编程式事务、Spring声明式事务@Transactional)、@Transactional 详解(用法 、rollbackFor、事务隔离级别【MySQL事务隔离级别、Spring事务隔离级别】、Spring 事务传播机制【什么是事务传播机制事务的传播机制有哪些、Spring 事务传播机制使用和各种场景演示】)

m0_74343467的博客 1523

Spring事务和AOP

记录spring事务以及AOP学习

现在的我强的可怕 1301

spring事务传播特性 @Transactional注解参数详解

spring事务传播特性 @Transactional注解参数详解 事物注解方式: @Transactional 当标于类前时, 标示类中所有方法都进行事物处理 , 例子: @Transactional public class TestServiceBean implements TestService {} 当类中某些方法不需要事物时: @Transactional public clas...

GA_007的博客 467

Spring框架中@Transactional注解原理深度解析

在实际开发中,合理使用@Transactional注解可以避免事务失效、死锁等问题,提高系统的性能和可靠性。对于复杂的业务场景,如分布式系统,需要结合Seata等分布式事务框架,扩展Spring事务管理的能力。 掌握@Transactional注解的原理和最佳实践,是Java开发者构建高质量、高可靠性的企业应用的重要基础。希望本文能够帮助读者深入理解Spring事务管理机制,为实际开发提供有价值的参考。

持续输出Java相关知识 1597
上一篇: Spring框架学习笔记2:什么是AOP,以及AOP的配置使用
下一篇: SpringMVC笔记一:简介+在写Controller时的一些组件介绍和注意点
code_feien
博客等级 码龄7年 71粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值