首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

springboot 事务,多张表操作事务

实际情景如下: 删除一个导航,需要删除a表; 删除导航子模块需要删除b表; b表和c表有个关联关系表,需要删除c表关联关系 结果为a表数据删除成功了,b表数据未成功删除,这时候我们应该是b表数据...,a表数据也,那么我们应该怎么实现这种方式呢?...第一步,在springboot启动类上开启事务,注解 @EnableTransactionManagement 第二步:事务注解, @Transactional(rollbackFor = Exception.class...TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return result; } } 如果三个表中有一个表删除失败返回false或者产生异常,都会产生事务...,将之前添加或者修改数据进行

3K40
您找到你想要的搜索结果了吗?
是的
没有找到

Spring嵌套事务是怎么

期待结果是即便内部事务regCourse()发生异常,外部事务saveStudent()俘获该异常后,内部事务应自行,不影响外部事务。 这是什么原因造成呢?...() 若发现事务被标记了全局,且在发生全局时,判断是否应该提交事务,这个方法默认返回 false,这里无需关注 isGlobalRollbackOnly() 该方法最终进入 DataSourceTransactionObject...在 regCourse()中抛异常,并触发回操作时,这个会继续传播,从而把 saveUser() 也,最终整个事务都被!...修正 Spring事务默认传播属性 REQUIRED,在整个事务调用链上,任一环节抛异常都会导致全局。...,让这个子事务单独,不会影响到主事务

1.3K50

Redis-10Redis事务

文章目录 概述 场景一: 命令格正确,数据类型错误 场景二:命令格式错误 总结 概述 对于 Redis 而言,不单单需要注意其事务处理过程,其能力也和数据库不太一样,这也是需要特别注意一个问题一...Redis 事务遇到命令格式正确而数据类型不符合 ,如下所示。...,说明被 Redis 事务滚了。...---- 总结 通过上面两个例子,可以看出Redis在执行事务命令时候,在命令入队时候, Redis 就会检测事务命令是否正确,如果不正确则会产生错误。...无论之前和之后命令都会被事务,就变为什么都没有执行。 当命令格式正确,而因为操作数据结构引起错误 ,则该命令执行出现错误,而其之前和之后命令都会被正常执行。

83130

PostgreSQLclog—从事务速度谈起

如果是之前学习别的数据库的人,看PostgreSQL会感觉到有句话非常奇怪:“PostgreSQL是立即完成,不会受到事务大小本身影响”。 奇怪在哪里呢?...看到这里,就可以明白,只要事务提交时候,设置状态为已提交,而事务时候,设置状态为已中断,就可以达到目的,的确避免了操作数百万行事务突然要回时候巨大代价。...事务提交与时候clog操作 ---- 首先来说提交。...但期间有情况,或者事务期间多次save point)必须尽可能原子性方式写入,否则事务可见性就会出现问题。...首先,写入的当时,事务没有结束时候,必然是”执行中”这个状态。当事务之后提交,或者回时候,pg是必然不会回头改这个标记,否则无论提交还是,都是一个代价巨大事情。

1.6K20

Spring事务两种方法

当然,Spring事务前提是你当前使用数据库必须支持事务,比如MySQLInnodb是支持,但Mysaim则是不支持事务。...方法一 使用 @Transaction 来配置自动,可以配置在类上,也可以配置在方法上(作用域不同),但对final或private修饰方法无效,且该类必须是受spring所管控,也就是被已经被注入类...,则事务会被自动,除非你在该方法中手动捕获了异常,且没有抛出新异常。...可以使用 @Transactional(rollbackFor = Exception.class) 来设定针对特定异常进行事务,如果不设置则默认会 RuntimeException and...} } 复制代码 方法二 通过注入 DataSourceTransactionManager 来手动开启事务,手动事务,用于抛出异常被catch后,进行手动,可控程度更高,可以更灵活使用。

96610

咦,为什么我事务不了?

MySQL 事务小伙伴们都懂,通过 begin 开启事务,通过 commit 提交事务或者通过 rollback 事务。...,那么在具体使用事务事务可能就会遭遇一些莫名其妙问题。...。 再次查询数据。 到第六步时候,我们发现查询到数据只剩三条了,说明第五步并没有生效。原因就在于执行 alter 之前,事务已经被隐式提交了。...对于上面的案例,如果大家去掉第四步 alter,那么是可以滚成功,这个小伙伴们自己来测试,我就不演示了。...我举个简单例子: 可以看到,跟第一小节测试步骤一样,只不过第四步换成一个 GRANT 语句,那么最终事务也会失效,原因就在于事务已经提交了。

89820

PostgreSQLclog—从事务速度谈起

一个kill命令过去之后,我们当时俩DBA开始慢慢数—小蚂蚁慢慢爬——碰到—颗大豆芽——碰到两颗大豆芽—— 最终在将近三个小时rollback之后,这个事务完成,业务系统恢复。...看到这里,就可以明白,只要事务提交时候,设置状态为已提交,而事务时候,设置状态为已中断,就可以达到目的,的确避免了操作数百万行事务突然要回时候巨大代价。...事务提交与时候clog操作 ---- 首先来说提交。...但期间有情况,或者事务期间多次save point)必须尽可能原子性方式写入,否则事务可见性就会出现问题。...首先,写入的当时,事务没有结束时候,必然是”执行中”这个状态。当事务之后提交,或者回时候,pg是必然不会回头改这个标记,否则无论提交还是,都是一个代价巨大事情。

2.5K20

spring事务多种方式「建议收藏」

1.代码中事务控制3种方式 编程式事务:就是直接在代码里手动开启事务,手动提交,手动。优点就是可以灵活控制,缺点就是太麻烦了,太多重复代码了。...当然,事务不回都是采用声明式事务或者是注解事务;编程式事务都是自己写代码手动,因此是不会出现不回现象。...再说下声明式事务和注解事务原理:当被切面切中或者是加了注解方法中抛出了RuntimeException异常时,Spring会进行事务。...正常情况下,按照正确编码是不会出现事务失败。...下面说几点保证事务方法 (1)如果采用编程式事务,一定要确保切入点表达式书写正确 (2)如果Service层会抛出不属于运行时异常也要能,那么可以将Spring默认异常修改为Exception

1.5K40

spring之事务其它属性(隔离级别、、只读、过期)(四)

2.使用 isolation 指定事务隔离级别, 最常用取值为 READ_COMMITTED。 3.默认情况下 Spring 声明式事务对所有的运行时异常进行....若真的是一个只读取数据库值方法, 应设置 readOnly=true。 5.使用 timeout 指定强制之前事务可以占用时间。...加上noRollbackFor,指定遇到UserAccountException异常后不回,我们对testBookShopService进行测试,即使我们加上了Transactional注解,但遇到余额不足时不进行...设置timeout指定强制时间。我们在purchase里面加上休眠,此时休眠2s<3s。 并将数据库中数据重新设置为: ? ? 此时我们测试testBookShopService,结果为: ?...虽然我们余额还可以再买一本,但是强制时间=3s<程序执行时间,所以进行强制

67330

MySQL FLASHBACK 数据

数据库里面的FLASHBACK 功能是一个让人刮目相看功能,如果你做错了什么怎么能将那段时间数据恢复,并且还让生产应用不停止,这是一个数据库管理员都想拥有的功能, SQL SERVER 需要借助第三方软件功能...,可以完成数据和恢复,ORACLE 独有的FLASHBACK 功能,以及POSTGRESQL pg_dirtyread 功能,都可以从某些方面来进行数据和数据找回。...MYSQL数据找回和使用是BINLOG2SQL 这个开源工具,其中原理如果你懂得MYSQLbinlog 原理,则你会很快明白其可以恢复数据方式。...如果你想产生语句,直接在 上图语句后面添加 flushback ?...同时这个工具可以根据你pos ,时间点, 日志范围等等进行相关数据提取。 所以有了这个工具,基本上大部分误操作都能进行数据找回和恢复。

3.1K30

Spring事务提交和机制,以及分布式事务处理解决方案

Spring事务提交和机制如下:提交机制:Spring事务默认提交机制是自动提交。当事务方法顺利执行完成(没有抛出异常)时,Spring会自动将事务提交到数据库中保存。...这意味着对数据库操作会永久保存。机制:Spring事务机制可以分为两种情况:未检查异常(unchecked exception):当事务方法抛出未检查异常时,Spring会自动事务。...这是因为检查异常通常表示一个业务逻辑错误,可能是临时或者可以修复。如果想要让Spring也事务,可以使用@Transactional注解rollbackFor属性指定需要回异常类型。...,Spring事务会根据异常类型是否为检查异常以及是否配置了异常类型来决定是否事务。...这些事务管理器提供了分布式事务管理功能,可以与Spring事务管理机制无缝集成。数据库XA事务:Spring通过使用JDBCXA连接和XA事务来管理在多个数据库之间分布式事务

42991

分布式事务TCC模式和业务悬挂问题

# TCC模式和业务悬挂问题 首先回顾一下TCC模式 # TCC模式原理 TCC模式与AT模式非常相似,每阶段都是独立事务,不同是TCC通过人工编码来实现数据恢复。...那么什么是控和业务悬挂呢? 空:当某分支事务try阶段阻塞时,可能导致全局事务超时而触发二阶段cancel操作。...如下图所示 空情况: 上方调用分支按照TCC流程正常执行,此时下方调用分支因为某种原因而阻塞了,由于长时间没有执行,这个分支发生了超时错误,由TM经过2.1步骤发送超时错误,全局事务指令给TC...业务悬挂情况: 假设在上方基础上,下方分支阻塞畅通了,此时他执行1.4去锁定资源(try),但整个事务都已经结束了,所以他不会执行第二阶段,但冻结了资源,这种情况应该进行避免。...是unsigned字段,不可能为负数,所以这里不用检测余额 // 直接扣减为负数会抛出异常,这里事务注解 // 0.

5.4K31

DaemonSet更新和(一)

在Kubernetes中,DaemonSet是一种特殊控制器,用于在集群中每个节点上运行一个Pod。由于DaemonSet在每个节点上都有一个Pod,因此更新和操作需要特别小心。...,要将名为“example-daemonset”DaemonSet中容器镜像更新为“new-image”,可以使用以下命令:kubectl set image daemonset example-daemonset...例如,要将名为“example-daemonset”DaemonSet中所有Pod标签更新为“new-label”,可以使用以下命令:kubectl label daemonset example-daemonset...可以使用以下命令更新DaemonSet中Pod模板:kubectl edit daemonset 此命令将打开一个编辑器,允许您编辑DaemonSetPod模板。...您可以将新Pod模板保存到编辑器中,并将其提交到Kubernetes中,以更新DaemonSet。

27900

解决AOP拦截Mapper方法不知道事务是否尴尬问题

但有个弊端,事务无法得知,埋点事件还是执行了。 最理想方案应该是这样。...如果当前线程调用链路上存在事务,那么应该在事务完成时再回调观察者,包括事务提交完成和事务完成;如果当前线程调用链路上不存在事务,则可以立即调观察者。...但这样无法感知事务,无法保证缓存和数据库数据一致性。 理想方案是这样。...拿到事务注解就可以拿到事务隔离级别以及rollbackFor,根据方法抛出异常就能判断当前事务是提交了还是滚了。简单事务判断如下。...解决事务问题也会出现新问题,比如,这个Mapper方法虽然是在事务方法中被调用,但由于业务上原因,并不需要其实现,结果使用try-catch包装了Mapper方法,这种情况就凉凉了。

2.3K11
领券