为什么要用事务管理

在我们同时操作两个或更多个数据库时,可能因为网络等各方面原因导致中间出现异常。造成像对第一个数据库的操作成功了,但是对第二个数据库的操作没有成功。这样数据的完整性就被破坏了。

事务:是一组操作的集合,要么同时成功,要么同时失败

事务控制主要三步操作:开启事务、提交事务/回滚事务。

-- 开启事务
start transaction; / begin;-- 1. 保存员工基本信息
insert into emp values (39, 'Tom', '123456', '汤姆', 1, '13300001111', 1, 4000, '1.jpg', '2023-11-01', 1, now(), now());-- 2. 保存员工的工作经历信息
insert into emp_expr(emp_id, begin, end, company, job) values (39,'2019-01-01', '2020-01-01', '百度', '开发'),                                                                                                       (39,'2020-01-10', '2022-02-01', '阿里', '架构');-- 提交事务(全部成功)
commit;-- 回滚事务(有一个失败)
rollback;

Spring事务管理-(员工管理)

  1. Transactional注解

注解:@Transactional

作用:就是在当前这个方法执行开始之前来开启事务,方法执行完毕之后提交事务。如果在这个方法执行的过程当中出现了异常,就会进行事务的回滚操作。

位置:业务层的方法上、类上、接口上

  • 方法上:当前方法交给spring进行事务管理(推荐)

  • 类上:当前类中所有的方法都交由spring进行事务管理

  • 接口上:接口下所有的实现类当中所有的方法都交给spring 进行事务管理

可以在application.yml配置文件中开启事务管理日志,这样就可以在控制看到和事务相关的日志信息了

#spring事务管理日志
logging: level: org.springframework.jdbc.support.JdbcTransactionManager: debug
  1. 事务进阶

 这里主要介绍@Transactional注解当中的两个常见的属性:

  • 异常回滚的属性:rollbackFor

  • 事务传播行为:propagation

我们先来学习下rollbackFor属性。

默认情况下,只有出现RuntimeException(运行时异常)才会回滚事务。如果想要所有的异常都回滚,需要配置robackFor属性

@Transactional(rollbackFor = Exception.class)
2.Propagation注解
  • 就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。

属性值含义
REQUIRED【默认值】需要事务,有则加入,无则创建新事务
REQUIRES_NEW需要新事务,无论有无,总是创建新事务
SUPPORTS支持事务,有则加入,无则在无事务状态中运行
NOT_SUPPORTED不支持事务,在无事务状态下运行,如果当前存在已有事务,则挂起当前事务
MANDATORY必须有事务,否则抛异常
NEVER必须没事务,否则抛异常

对于这些事务传播行为,我们只需要关注以下两个就可以了:

  1. REQUIRED(默认值)

  2. REQUIRES_NEW

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 之 ViewBinding 实现更安全、高效的视图绑定

​​一、配置说明​​​​作用位置​​需在模块级 build.gradle或 build.gradle.kts文件的 android {}块内添加:android {buildFeatures {viewBinding true // Kotlin DSL 语法} }android {buildFeatures {viewBinding true // Groovy 语法} }​​生成规则​​为每…

全球首款Java专用AI开发助手实测:一句话生成完整工程代码——飞算 JavaAI

🌟 嗨,我是Lethehong!🌟🌍 立志在坚不欲说,成功在久不在速🌍🚀 欢迎关注:👍点赞⬆️留言收藏🚀🍀欢迎使用:小智初学计算机…

Shader开发(七)创建第一个Shader项目

在前面的章节中,我们已经了解了Shader的基本概念和渲染管线的工作原理。现在,是时候动手实践了!本章将带您一步步创建第一个Shader项目,开启真正的Shader开发之旅。 为什么选择openFrameworks? 与其他文章不同&#x…

IAR软件中测量函数执行时间

通常在调试代码中需要直到某个函数或者某段代码的实际执行时间,在IAR中可以直接借助软件提供的工具来计算代码执行时间。 第一种方法 进入仿真调试界面,在需要测量的代码前面打断点。工具栏中选择 ST-LINK — Data Log Summary在 Data Log Summary 窗口中…

Java 字节码文件(.class)的组成详解

文章目录基础信息常量池字段方法属性字节码文件内容说明案例文件基本信息类的基本信息常量池字段信息构造方法实例方法主方法源文件信息字节码文件由五部分组成,分别是基础信息、常量池、字段、方法、属性。案例: public class Main implements Interfa…

C++之vector类的代码及其逻辑详解 (下)

1. insert()这个就是在指定位置插入一个元素,首先计算要插入的这个位置和开头之间的距离,接着判断那个_finish 有没有碰到_endofstorage 或者_endofstorage 是不是为0,如果满足条件,那就进行扩容,然后接着重新计算距离…

【自动化测试】Python Selenium 自动化测试元素定位专业教程

1. 引言:元素定位在 Selenium 中的核心地位 元素定位是 Selenium 自动化测试的基础,所有用户交互操作(如点击、输入、选择)都依赖于准确识别页面元素。Selenium WebDriver 提供了多种定位策略,从简单的 ID 定位到复杂…

通用代码自用

多文件上传public int save(Role role, RequestParam("nfile") MultipartFile nfile, HttpServletRequest request) {System.out.println(nfile.getOriginalFilename());String path request.getSession().getServletContext().getRealPath("/upload");Fi…

生成式AI如何颠覆我们的工作和生活

原问题: ​你觉得生成式AI未来会如何改变普通人的工作和生活?​ 做过一个对比国外和国内工业化产品制造的简单调研,类似一款定制化的台灯或者语音音响,从零到原型实物, 美国至少需要20万美刀,国内成本大概…

K8S、Docker安全漏洞靶场

1 介绍 一个脆弱基础设施自动化构建框架,主要用于快速、自动化搭建从简单到复杂的脆弱云原生靶机环境。 1.1 项目的缘起 在研究漏洞时,我们经常会发现“环境搭建”这一步骤本身就会占用大量的时间,与之相比,真正测试PoC、ExP的时间可能非常短。由于许多官方镜像在国内的…

使用Nginx部署前后端分离项目

使用Nginx部署前后端分离项目:用户中心系统实践指南 部署前的关键准备 在正式部署前,务必确保前后端在生产环境能正常运行: 前端:测试所有API请求路径和生产环境配置后端:验证数据库连接、环境变量和外部服务集成完整流…

当前就业形势下,软件测试工程师职业发展与自我提升的必要性

软件测试行业正处于深刻变革期,2025年的市场已超越400亿美元规模,预计2027年将增长7% 。在这个技术驱动、效率至上的时代,测试工程师若想保持竞争力,必须主动拥抱变革,系统性提升技能。通过深入分析行业现状与人才需求…

java 之 继承

一、继承 1.1 、什么是继承? 继承就是把所有的类的公共部分(相同的成员)提取出来,放到一个类中继承需要使用 extends 关键字 public class Animal{ public String name; } public class Dog extends Animal{}Dog 是 An…

强化应急通信生命线:遨游三防平板、卫星电话破局极端灾害救援

暴雨倾盆,山洪咆哮,城市陷入内涝。今年进入汛期以来,我国广东、福建、河南、陕西、京津冀等地相继遭遇暴雨、洪涝、山洪等灾害,道路损毁、基站断网、电力中断等次生问题为应急响应带来严峻挑战。如何保障极端场景下的通信畅通&…

【Linux系统】进程间通信:命名管道

1. 匿名管道的限制匿名管道存在以下核心限制:仅限亲缘关系进程:只能用于父子进程等有血缘关系的进程间通信(如通过 fork() 创建的子进程)。单向通信:数据只能单向流动(一端写,另一端读&#xff…

Python Day24 多线程编程:核心机制、同步方法与实践案例

一、线程事件对象(threading.Event)threading.Event 用于实现线程间的通信,可让一个线程通知其他线程终止任务,核心是通过 “事件触发” 机制协调线程行为。核心方法:创建事件对象:event threading.Event(…

007 前端( JavaScript HTML DOM+Echarts)

一.html dom运用查找html元素的三种方式通过 id 找到 HTML 元素通过标签名找到 HTML 元素通过类名找到 HTML 元素1.通过 id 找到 HTML 元素<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>msf的网页</title> <…

实习文档背诵

实习内容:1.定时任务与数据补全:基于 XXL-JOB 实现分布式定时任务调度&#xff0c;补全近半年历史操作日志数据&#xff0c;有效解决因网络异常导致的数据缺失问题。业务场景&#xff1b;集团的4a日志半年内没有同步&#xff0c;这边需要把日志数据同步到集团上首先先评估每天的…

分布式CAP定理

CAP 定理在一个分布式系统中&#xff0c;以下三个特性不可能同时完全满足&#xff0c;最多只能满足其中两个&#xff1a;C&#xff08;Consistency&#xff0c;一致性&#xff09;&#xff1a;所有节点在同一时间看到的数据是完全一致的&#xff08;即更新操作成功并返回后&…

PHP-Casbin:现代化 PHP 应用的权限管理引擎

在当今复杂的Web应用中&#xff0c;精细化的权限管理是保障系统安全的关键环节。PHP-Casbin 作为Casbin生态的PHP实现&#xff0c;凭借其灵活的模型支持和强大的扩展能力&#xff0c;已成为PHP开发者实现访问控制的首选工具。 超越传统权限模型 PHP-Casbin 基于PERM&#xff…