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

Springboot @Transcational没有回滚

Spring Boot是一个用于创建独立的、基于Spring框架的Java应用程序的开发框架。@Transactional是Spring框架中的一个注解,用于管理事务。当在方法上添加了@Transactional注解时,如果方法执行过程中发生异常,Spring会自动回滚事务,即撤销之前已经执行的数据库操作。

然而,如果在Spring Boot中使用@Transactional注解时,事务没有回滚的话,可能是由于以下几个原因:

  1. 异常被捕获并处理:如果在方法中捕获了异常并进行了处理,Spring就无法感知到异常的发生,从而无法触发事务回滚。在这种情况下,可以考虑将异常重新抛出或者使用Spring的异常处理机制来处理异常。
  2. 事务传播属性设置不正确:事务传播属性定义了事务在不同方法之间如何传播。如果方法A调用了带有@Transactional注解的方法B,并且方法B的事务传播属性设置为Propagation.REQUIRED(默认值),那么方法B将加入到方法A的事务中。如果方法B发生异常,整个事务将回滚。但是如果方法B的事务传播属性设置为Propagation.REQUIRES_NEW,那么方法B将创建一个新的事务,与方法A的事务无关。如果方法B发生异常,只会回滚方法B的事务,不会影响方法A的事务。因此,需要确保事务传播属性设置正确。
  3. 事务配置不正确:在Spring Boot中,可以通过配置文件或者注解来配置事务管理器。如果事务管理器配置不正确,可能导致事务无法正常回滚。需要确保正确配置了事务管理器,并且与数据库连接池等其他组件协调一致。

总结起来,如果Spring Boot中的@Transactional注解没有触发事务回滚,需要检查异常是否被正确处理、事务传播属性是否设置正确以及事务配置是否正确。如果问题仍然存在,可以考虑查看日志以获取更多的错误信息,并参考Spring Boot官方文档或者相关社区进行进一步的排查和解决。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么加了@Transactional注解,事务没有

在前天的《事务管理入门》一文发布之后,有读者联系说根据文章尝试,加了@Transactional注解之后,事务并没有。...问题原因 在前文的描述中,我漏了一个细节,其实在示例代码中,与之前拿的基础例子在配置中有一个关键属性没有提到,就是下面这个配置: spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect...MySQL5InnoDBDialect,主要为了保障在使用Spring Data JPA时候,Hibernate自动创建表的时候使用InnoDB存储引擎,不然就会以默认存储引擎MyISAM来建表,而MyISAM存储引擎是没有事务的...所以,如果你的事务没有生效,那么可以看看创建的表,是不是使用了MyISAM存储引擎,如果是的话,那就是这个原因了! 除此之外,对于事务没有生效的可能还很多,比如,在同一个类中定义又调用等。

88110

spring事务机制_事务失败

Spring事务 使用 @Transaction 来配置自动,可以配置在类上,也可以配置在方法上(作用域不同),但对final或private修饰的方法无效,且该类必须是受spring...//some code //db operation } } Jetbrains全家桶1年46,售后保障稳定 若被配置的方法或类抛出了异常,则事务会被自动...可以使用 @Transactional(rollbackFor = Exception.class) 来设定针对特定的异常进行事务,如果不设置则默认会 RuntimeException and...User user) { userMapper.insert(user); throw new RuntimeException(); // 抛出异常,事务...} } 通过注入 DataSourceTransactionManager 来手动开启事务,手动事务,用于抛出异常被catch后,进行手动

2.1K20

嵌套事务策略_内部事务会导致外部事务

2.外部起事务,内部起事务,内部没有Try Catch 内部出错:如果内部事务出错,内部和外部事物全部,外部之前的操作全部不存在,但是之后的操作继续执行。...外部出错:内部和外部事物全部,外部之前的操作全部不存在,但是之后的操作继续执行。 4.外部起事务,内部不起事务,但没有Try Catch....6.外部不起事务,内部起事务,但没有Try Catch. 内部出错:外部操作被正常执行,内部ROLLBACK操作前全部。由于没有catch块,所以外部操作全部执行。...ROLLBACK TRAN将@@TRANCOUNT减为0并回整个事务及其中嵌套的事务,无论它们是否已经被提交。因此,嵌套事务中所做的更新被,数据没有任何改变。...该隐含的事务对批处理中的其它语句没有影响,因为当语句完成时,该事务要么提交,要么。但是,当调用触发器时,该 隐含的事务将仍然有效。

2.7K20

java 配置事务_Spring@Transactional事务

Spring中事务分为编程时事务和声明式事务,编程式事务:编程人员通过代码控制事务的开启、、提交,声明式事务:把事务的处理交给spring。...实现事务需要注意的问题: 1.@Transactional 注解可以被应用于接口定义和接口方法、类定义和类的 public 方法上。 2....3.默认情况下,spring会对unchecked异常进行事务;如果是checked异常则不回。...去掉方法体中的try catch (4)catch (Exception e) { throw e;}继续向上抛,目的是让spring事务捕获这个异常 除了以上注意的问题,说一下最近遇到的关于多数据源配置事务的问题...在项目中关于事务该配置的也配置了,需要注意的问题也注意了,但有的事务可以出现有的失败,最终问题所在: id相同的事务配置分别配置在两个application.xml文件中,如果多个application.xml

2.3K20

git commit

2.1 git reset --hard 丢弃最新的提交 代码提交后,需求发生变化导致之前提交的已经不合适,或者 代码提交后发现有严重bug,需要回可是使用这个命令: git reset --hard...tips: 1,HEAD^ 表示 最新提交HEAD位置往回数一个提交, 几个 ^ 就往回数几个提交; 2,HEAD~n 表示 新提交HEAD位置往回数n个提交 可以发现,reset 命令只能最新的提交...如果最后一次commit需要保留,而只想回之前的某次commit,reset命令可能就无法满足了。...总结: 最新的提交 :git reset 和 git rebase 命令都可以 中间某次提交: git rebase 可以, git reset 不可以 如果提交已经同步到远程仓库,需要使用git...push origin -f branch(分支名) 来将回也同步到远程仓库(master 分支谨慎使用 -f)

8.3K30

springboot 事务,多张表的操作事务

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

3K40
领券