解决@Transactional事务不回滚问题

news2024/7/4 6:13:56

1、事务不回滚情况 - 演示

 1.1 情况说明:

service层加了事务管理器@Transactional ,报错后,事务并没有同时回滚;

service层调用了两个dao层的方法,执行第一个dao层方法,正常往数据库插入数据。执行第二个dao层的方法报错,事务没有同时回滚。出现往考勤申请主表插入数据成功,考勤详情表插入数据失败,这样是不符合正常逻辑的;

按照正常逻辑,事务要么同时回滚,要么都执行成功;

 dao层

 service 层

 2、事务管理器失效原因

 2.1 因为 dao层、service层都加了 try{}catch,虽然在service层加了事务管理器@Transactional,事务依旧失效。

2.2 正确的处理方式是只在 Controller 加 try{}catch,dao层、service层不需要加  try{}catch,service层只需要添加事务管理器@Transactional;

2.3 这样配置后,操作数据库的方法,要么同时执行成功,要么同时执行失败。

3、事务正常生效-演示

 Controller层

service层、dao层

 

 接口调用效果

 3、事务失效 - 避坑指南

3.1 如果异常被try{}catch{}了,事务就不回滚了,如果想让事务回滚必须再往外抛try{}catch{throw Exception}。

 3.2 @Transactional 注解只能加在 public 方法上,这是由 Spring AOP 的本质动态代理决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。 

3.3 @Transactional既可以作用于接口,接口方法上以及类已经类的方法上。但是Spring官方不建议接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/642716.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

selenium4-获取页面元素相关信息

引言 现在,越来越多的公司和企业开始将业务转移到线上平台。而对于网站或者应用的测试、开发人员来说,获取页面元素相关信息是解决很多问题的关键之一。 如果您正为此而苦恼,那么恭喜您,因为这篇文章将会为您揭秘Selenium4获取页…

HAProxy概述、搭建Web群集

HAProxy概述、搭建Web群集 一、HAProxy概述1、HAProxy的主要特性2、常见的Web集群调度器3、Haproxy应用分析4、Haproxy调度算法原理 二、LVS、Nginx、HAproxy的区别三、LVS、Nginx、HAproxy的优缺点1、Nginx的优点:2、Nginx的缺点:3、LVS的优点&#xff…

数据抓取,驱动商业智能的密码|HTTP代理的应用

在信息爆炸的时代,数据无疑成为了推动行业发展的重要动力。而数据抓取作为一种强大的工具,已经成为众多行业的秘密武器,为商业决策提供了前所未有的洞察力和竞争优势。让我们揭开数据抓取的神秘面纱,探索它在各个行业中的高级应用…

SpringCloud microservice-student-provider-1001服务提供者项目建立(三)

新建一个服务器提供者module子模块&#xff0c;类似前面建的common公共模块&#xff0c;名称是 microservice-student-provider-1001 pom.xml改成&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSc…

go/go-pg插入time.Time字段为date类型时值自动变化的问题

今天偶然间发现一个问题&#xff0c;基于go-pg框架插入数据时&#xff0c;时间值自动减了1天。 目录 背景 现象与场景还原 问题解决与总结 背景 结构体中包含时间列类型&#xff0c;列类型是Date&#xff0c;对应的结构体类型是time.Time&#xff0c;此时对此对象做插入操…

Segment Anything使用手册(交互式数据标柱|自动数据标柱)

主要内容包含segment-anything项目的安装、基于SamPredictor对单点输入生成mask、基于SamPredictor对多点输入生成mask、基于SamAutomaticMaskGenerator自动生成mask。 Segment Anything项目是一个可以对任何图像进行分割的项目&#xff0c;其论文介绍可以查看https://blog.cs…

【JavaWeb】Cookie和Session的使用场景分析与应用

哈喽&#xff0c;大家好~我是你们的老朋友&#xff1a;保护小周ღ Cookie 和 Session 都是网页中常用的状态保持的技术&#xff0c;它们可以帮助网站识别用户身份&#xff0c;保存用户状态等&#xff0c;什么是 Cookie &#xff1f;什么是 Session &#xff1f;他们具体是什么…

Docker部署SonarQube代码质量检查平台+PostgreSQL数据库

一、安装PostgreSQL11(PostgreSQL7.9之后不支持MySQL) 检查代码的时候&#xff0c;仓库或者本地的代码会全部存储到postgresql数据里中&#xff0c;所以容量尽量大点&#xff0c;我这给个300G 指定拉取postgres11版本&#xff0c;不要postgres:latest&#xff0c;因为你部署so…

命令行创建uniapp项目

命令行创建uniapp项目 除了使用HBuilderX工具可视化搭建项目外&#xff0c;DCloud官方还提供了一个脚手架用于命令行搭建项目。 环境安装 全局安装vue-cli npm i vue/cli4 -g建议使用vue-cli 4.x版本&#xff0c;vue-cli 5.x与webpack存在冲突&#xff0c;会导致运行报错 …

聘准备-数据科学家

https://www.zhihu.com/question/21592677/answer/786529944

爆肝整理,性能测试-负载测试总结,你不知道的都在这了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试中最容易…

软件测试进阶知识 —— 性能测试

性能测试 性能测试是指在一定条件下系统行为表现是否符合需求规格的性能指标。 例如&#xff0c;通过测试传输的最长时限、传输的错误率、计算的精度、响应的时限和恢复时限等性能指标&#xff0c;验证了软件系统是否能够达到需求规格说明中所提出的性能指标&#xff0c;发现了…

vue的使用及运行

Vue使用 <!-- 从三方网站 引入网上的vue 需要网络 --> <!-- <script src"https://cdn.jsdelivr.net/npm/vue2.7.14/dist/vue.js"></script> --> <!-- 本地引入 --> <script src"./js/vue.js"></script><div…

vcruntime140.dll下载,快速解决vcruntime140.dll缺失的问题

在使用Windows操作系统时&#xff0c;有时会遇到“vcruntime140.dll缺失”等错误提示。这意味着系统中出现了一些严重的问题&#xff0c;可能是由于vcruntime140.dll文件损坏或缺失导致的。本文将详细介绍vcruntime140.dll的作用以及如何进行vcruntime140.dll下载来修复缺失的问…

STM32开发环境搭建工程创建(嵌入式学习)

STM32开发环境搭建&工程创建 1. 开发环境搭建1.1 STM32CubeMX简介安装 1.2 Keil5简介安装 1.3 ST_LINK简介安装 2. 创建STM32工程 1. 开发环境搭建 1.1 STM32CubeMX 简介 STM32CubeMX是STMicroelectronics公司提供的一款集成开发环境&#xff08;IDE&#xff09;工具&…

基于Github开源项目Next Chat4 —— 之原生Js前端特效给你的眼睛来一场视觉盛宴吧

前期回顾 打造极简风格动效 —— 5 分钟轻松实现惊艳、震撼人心的视觉效果_彩色之外的博客-CSDN博客css Loading 实战教学https://blog.csdn.net/m0_57904695/article/details/131156011?spm1001.2014.3001.5501 &#x1f44d; 本文专栏&#xff1a;开发技巧 一键使用 GP…

精通postman教程(四)-创建请求及添加参数 详解

作为一名测试工程师&#xff0c;那么Postman绝对是大伙必备的工具之一。 在这个系列教程中&#xff0c;我将为大伙详细讲解如何使用Postman进行API测试。 今天我为大伙讲解postman如何创建请求及添加参数&#xff0c;让你们快速上手这款工具。 一、处理GET请求 Get请求用于…

敏捷实践 | 8个实用方法助你开好有效的敏捷反思会

又是年底&#xff0c;各大app都推出各种年度总结&#xff0c;年度回顾。这些总结有的很有趣&#xff0c;有的很扎心&#xff0c;在推动年底KPI完成的同时&#xff0c;也给我们带来不同角度的思考。而在敏捷工作方法中&#xff0c;反思回顾也是敏捷实践很关键的一环。那么我们如…

链动2+1系统开发模式,如何助力企业平台月赚上百万?

现在市面上的商业模式数不胜数&#xff0c;各种各样的都有&#xff0c;而链动21就是其中非常优质的一款商业模式。它不仅能够让消费者消费全返&#xff0c;还能够助力企业平台月赚上百万&#xff0c;而且完全的合法合规&#xff0c;那么链动21模式是怎么做到的呢&#xff1f;下…

2023年惠州/广州/深圳NPDP产品经理认证,这里够专业

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…