Springboot 事务回滚不生效可能出现的原因

检查一下几点:

1.数据库是否为InnoDB引擎,具体原因请查看 Mysql引擎类型刨析

2.配置文件中是否开启

transaction:
rollback-on-commit-failure: true

3.是否在启动类中加入注解(此项可忽略,spring boot 默认开启了事务)

@EnableTransactionManagement

[email protected]注解位置:

@Transactional注解必须和抛出异常的位置在一起

在Service中加入的事务注解,手动抛出异常时要在Service中抛出,才能看到效果

如果Controller中,调用两个不同Service的方法并开启了事务回滚,要想事务生效,则需要在Controller也加入@Transactional注解

[email protected]注解默认只能拦截RuntimeException和Error,如果自定义的Exception,需要设置rollbackFor 属性值,如下

@Transactional(rollbackFor = Exception.class)

注意:添加@Transactional的方法必须是public

原文地址:https://www.cnblogs.com/Z-share/p/11713863.html

时间: 2024-07-31 05:23:44

Springboot 事务回滚不生效可能出现的原因的相关文章

springboot 项目中使用@transactional注解不生效导致事务回滚失败问题总结

在常规使用@transactional注解时,如果碰到不生效问题,要首先想到如下几个问题: 1. 如果是有关数据库操作,首先要查看牵涉到的表使用的引擎是什么引擎,要知道使用"MYISAM"数据库引擎是不支持事务回滚操作的,需要使用"InnoDB数据引擎". 2. 查看方法是否是public方法,如果方法是private方法,也是不支持事务的. 3. 如果事务回滚失败还要查看出现的异常是checked异常还是unchecked异常.checked异常会回滚,unche

【Java EE 学习第19天】【使用过滤器实现全站压缩】【使用ThreadLocal模式解决跨DAO事务回滚问题】

一.使用过滤器实现全站压缩 1.目标:对网站的所有JSP页面进行页面压缩,减少用户流量的使用.但是对图片和视频不进行压缩,因为图片和视频的压缩率很小,而且处理所需要的服务器资源很大. 2.实现原理: (1)使用GZIPOutputStream工具对数据进行压缩,中间借助了ByteArrayOutputStream类进行结果的存储. (2)使用过滤器对浏览器请求进行拦截,通过自定义HttpServletResponse类(使用包装模式),重写getWriter方法,使得写出的目的地转变成ByteA

转:PostgreSQL的clog—从事务回滚速度谈起

1 概述 如果是之前学习别的数据库的人,看PostgreSQL会感觉到有句话非常奇怪:"PostgreSQL的回滚是立即完成的,不会受到事务大小本身的影响". 奇怪在哪里呢?比方我曾经遇到过一次MySQL的故障,一个开发给生产数据库导入数据,用的是Python脚本,但是,他没有注意一个事情,Python的MySQLdb默认情况下,是设置autocommit为0的,于是这哥们导数据(这里说的导入,不是普通那种load data,而是带有业务操作的SQL语句,所以需要脚本操作)脚本跑了一天

知识点:Quartz添加事务回滚

自动任务类: @PersistJobDataAfterExecution @DisallowConcurrentExecution public class ReCodeBack implements Job { private static final Logger LOGGER = LoggerFactory.getLogger(ReCodeBack.class); @Autowired ReCodeBackTag reCodeBackTag; @Override public void e

springmvc事务回滚失效

转载:http://blog.csdn.net/z69183787/article/details/37819831 前文提到,最新换了框架,新项目用SpringMVC + Spring JdbcTemplate.搭框架时,发现了一个事务无法正常回滚的问题,记录如下: 首先展示问题: Spring applicationContext.xml配置: [html] view plaincopy <bean id="dataSource" class="org.spring

spring的事务回滚

@Transactional(rollbackFor = { Exception.class }) 需要把异常抛出到带有@Transactional(rollbackFor = { Exception.class })  这个注释的函数外面,回滚才能生效. 出现错误: org.springframework.orm.hibernate3.HibernateSystemException: identifier of an instance of com.cqut.entity.outintask

JDBC 事务回滚

package jdbcstu; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class TransactionTest { public static void main(String[] args) { Connection conn=null; try { conn=getConnectio

ssh事务回滚,纪念这几个月困扰已久的心酸

以前的事务采用的是JTA,xml注入的方式.本人就着开发要优雅合理利用轮子的态度,一直不满意JTA式的申明和切入方式. spring的注解方式多优雅,可是万恶的直到项目快要上线时终于找到了注解式不能回滚的缘由. Spring的事务回滚,当且仅当捕获到RuntimeException类型异常时,才会回滚,对普通Exception异常无效. 满满一把心酸泪,,, 原理:代码贴上: 配置可参考如下:http://blog.csdn.net/greensurfer/article/details/752

Entity Framework实现事务回滚

在使用Entity Framework为主从表添加数据,当一个表添加数据成功,另一个表添加数据失败,这时候就需要用到事务回滚. 比如有以下关系的2张表. 客户端使用TransactionScope类可以实现事务回滚. class Program { static void Main(string[] args) { try { using (TransactionScope ts = new TransactionScope()) { using (CountryDetailsEntities