SpringBootWeb 篇-深入了解 Spring 异常处理、事务管理和配置文件参数配置化、yml 配置文件
🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍


文章目录
1.0 配置文件
1.1 yml 配置文件
1.2 参数配置化
1.2.1 使用 @Value 注解注入单个配置参数
1.2.2 使用 @ConfigurationProperties 注解将一组相关配置参数注入到一个类中
2.0 异常处理
3.0 Spring 事务管理
3.1 @Transactional 注解
3.2 rollbackFor 属性与 propagation 属性
1.0 配置文件
在 SpringBootWeb 项目中,配置文件通常是 application.properties 或 application.yaml 或者 application.yml ,存放在 src/main/resources 目录下。这些配置文件用于配置应用程序的属性和设置,可以包括数据库连接信息、日志级别、服务器端口等项目配置。
1.1 yml 配置文件
是一种简洁易读的数据序列化格式,常用于配置文件和数据交换。YAML 配置文件通常以 .yml 或 .yaml 为扩展名,其内容由键值对、列表、嵌套结构等组成,支持注释、缩进和多种数据类型。需要注意的是,":" 后面不是直接加上 value 值,而是有一个空格隔离开来的。
1)键值对:使用冒号(:)分隔键和值,例如:
key1: value1
key2: value2
2)列表:使用短横线(-)表示一个项,例如:
- item1
- item2
3)嵌套结构:可以将键值对或列表嵌套在另一个键或值中,例如:
key1:
subkey1: value1
subkey2: value2
在 application.properties 文件中,可以通过键值对的方式来配置属性,例如:
server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=123456
在 application.yaml 文件中,则采用了更加清晰的层次结构来配置属性,例如:
server:port: 8080spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: 123456
可以根据项目需求选择使用 application.properties 或 application.yaml 来配置项目属性,这些配置文件会被 SpringBoot 自动加载并应用到项目中。
1.2 参数配置化
参数配置化是指将应用程序中的配置参数与代码逻辑分离,以便在不修改代码的情况下更改参数值。在 SpringBoot 项目中,我们可以将参数配置化为配置文件中,然后在代码中通过注解或者通过 @Value 注入方式来使用这些配置参数。
1.2.1 使用 @Value 注解注入单个配置参数
简单来说,根据键来给变量注入值,@Value 注解中的 ${} 的形式来指定键。
#mysql 配置 spring:datasource:drive-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/db05?characterEncoding=utf-8&useSSL=trueusername: rootpassword: 123456@Value("${spring.datasource.url}")String databaseUrl;@Testpublic void test3(){System.out.println(databaseUrl);}运行结果:
1.2.2 使用 @ConfigurationProperties 注解将一组相关配置参数注入到一个类中
首先先创建一个类,成员变量的名称与配置文件中的参数名称保持一致,且将该类对象进行控制反转,将其成为 Bean 对象。
最后,在该类上加上 @ConfigurationProperties 注解,注解中的属性 prefix 指定属性的前缀。
代码演示:
Pojo 类:
import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;@Data @Component @ConfigurationProperties(prefix = "spring.datasource") public class Pojo {private String url;private String username;private String password; }配置文件:
#mysql 配置 spring:datasource:drive-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/db05?characterEncoding=utf-8&useSSL=trueusername: rootpassword: 123456测试代码:
@AutowiredPojo pojo;@Testpublic void test4(){System.out.println(pojo.getUrl());System.out.println(pojo.getUsername());System.out.println(pojo.getPassword());}运行结果:
这样就可以将一组相关配置参数绑定到一个类中。这样,SpringBoot 会自动将前缀的属性值绑定到类中对应的字段上。这种方式可以使得代码更加清晰和整洁,将一组相关的配置参数集中管理在一个类中。
2.0 异常处理
在 SpringBootWeb 项目中,避免不了会有异常抛出,那么如果异常抛出来,没有进行有效的捕获,那么异常就会直接响应给客户端。
为了避免将异常直接返回给客户端,需要将异常进行全部捕获处理之后,再响应给客户端。
1)首先创建一个捕获异常的类,在类中定义一个方法且在该方法上加上 @ExceptionHandler 注解,在注解上设置 Exception.class 的属性,从而捕获全局的异常。最后在该类上加上 @RestControllerAdvice 注解,将对象返回值的格式转换成 json 格式。
代码演示:
import org.example.Pojo.Result; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice;@RestControllerAdvice public class exceptionHandler {//捕获异常@ExceptionHandler(Exception.class)public Result catchException(Exception ex){ex.printStackTrace();return Result.error("error");} }
3.0 Spring 事务管理
通过使用 Spring 的事务管理可以简化开发过程,同时确保数据操作的一致性和完整性。简单来说,要么都不执行,要么都执行。当在同一件事务中代码执行到一半,遇到异常了,那么后面的代码直接结束,都不会执行了,前面已经执行的代码就会进行回滚,回到原来的状态。
3.1 @Transactional 注解
是 Spring Framework 提供的用于声明式事务管理的注解之一。通过在方法上添加 @Transactional 注解,可以告诉 Spring 将该方法的执行过程纳入事务管理范围。
1)首先,在 Spring 的配置文件中配置事务管理器和事务通知器。
2)然后在需要添加事务的方法上加上 @Transactional 注解,Spring 会根据这个注解来管理该方法的事务。
3)@Transactional 注解提供了很多属性来定义事务的传播行为、隔离级别、超时时间等。
代码演示:
@Override@Transactionalpublic void deleteId(Integer id) {deptMapper.deleteId(id);empMapper.deleteByDeptId(id);}
以上的两个操作就会绑定在一起,要么一起执行,要么都不执行。
3.2 rollbackFor 属性与 propagation 属性
1)rollbackFor 属性用于指定哪些异常需要回滚事务。如果方法中抛出的异常是指定的异常类型之一,事务将回滚;否则,事务不会回滚。接受一个数组,可以指定多个异常类型。常见的用法是将一些受检查异常(checked exception)转换为不受检查异常(unchecked exception),从而触发事务回滚。
默认情况下,@Transactional 注解中的 rollbackFor 属性未指定时,事务将回滚的默认异常是 RuntimeException 及其子类。也就是说,如果方法中抛出的异常是 RuntimeException 或其子类之一,事务将会回滚。
代码演示:
@Transactional(rollbackFor = Exception.class)public void deleteId(Integer id) {deptMapper.deleteId(id);empMapper.deleteByDeptId(id);}一旦抛出异常,都会进行回滚操作。Exception.class 代表遇到任何一种异常都会进行回滚操作。
2)propagation 属性
propagation 属性是 @Transactional 注解中用来指定事务的传播行为的一个属性。通过设置 propagation 属性,可以控制方法之间的事务如何传播和交互。
propagation 属性可能的取值:
Propagation.REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是最常用的传播行为。
@Transactional(propagation = Propagation.REQUIRED) public void updateUser(User user) {// 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务 }
Propagation.REQUIRES_NEW:创建一个新的事务,并暂停当前事务(如果存在)。新事务和当前事务之间是独立的,互不影响。
@Transactional(propagation = Propagation.REQUIRES_NEW) public void updateUserWithNewTransaction(User user) {// 创建一个新的事务,暂停当前事务(如果存在) }
通过合理设置 propagation 属性,可以实现对事务传播行为的控制,确保事务的正确性和一致性。

相关文章:
SpringBootWeb 篇-深入了解 Spring 异常处理、事务管理和配置文件参数配置化、yml 配置文件
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 配置文件 1.1 yml 配置文件 1.2 参数配置化 1.2.1 使用 Value 注解注入单个配置参数 1.2.2 使用 ConfigurationProperties 注解将一组相关配置参数注入到一个类中…...
重学java 55. 集合 Set接口
我救自己万万次,铮铮劲草,绝不动摇 —— 24.6.2 一、Set集合介绍 Set和Map密切相关的 Map的遍历需要先变成单列集合,只能变成set集合 二、HashSet集合的介绍和使用 1.概述 HashSet是Set接口的实现类 2.特点 a、元素唯一 b、元素无序 c、无索引…...
spring项目修改时间格式
一、配置方式 在application.yml上添加 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8 二、注解方式 1、添加依赖 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId&…...
每周统计-20240531
用于测试程序的稳定性: 龙虎榜: 成交额: 封成比: 收盘前放量: 开盘抢筹: 封单额:...
【工具】探索 DOU:每用户数据使用量
缘分让我们相遇乱世以外 命运却要我们危难中相爱 也许未来遥远在光年之外 我愿守候未知里为你等待 我没想到为了你我能疯狂到 山崩海啸没有你根本不想逃 我的大脑为了你已经疯狂到 脉搏心跳没有你根本不重要 🎵 邓紫棋《光年之外》 什么是 DOU…...
JVM之垃圾判断的详细解析
垃圾判断 垃圾介绍 垃圾:如果一个或多个对象没有任何的引用指向它了,那么这个对象现在就是垃圾 作用:释放没用的对象,清除内存里的记录碎片,碎片整理将所占用的堆内存移到堆的一端,以便 JVM 将整理出的内…...
07- Redis 中的 HyperLogLog 数据类型和应用场景
1. 介绍 Redis HyperLogLog 是 Redis 2.8.9 版本新增的数据类型,是一种用于【统计基数】的数据集合类型,基数统计就是指统计一个集合中不重复的元素个数。但要注意,HyperLogLog 的统计规则是基于概率完成的,不是非常准确…...
jenkins应用2-freestyle-job
1.jenkins应用 1.jenkins构建的流程 1.使用git参数化构建,用标签区分版本 2.git 拉取gitlab远程仓库代码 3.maven打包项目 4.sonarqube经行代码质量检测 5.自定义制作镜像发送到远程仓库harbor 6.在远程服务器上拉取代码启动容器 这个是构建的整个过程和步骤…...
K210视觉识别模块学习笔记1:第一个串口程序_程序烧录与开机启动
今日开始学习K210视觉识别模块:简单的认识与串口程序 亚博智能的K210视觉识别模块...... 固件库版本: canmv_yahboom_v2.1.1.bin 既然K210作为一个视觉识别外设模块来使用,我认为第一个程序 就没必要学点灯之类的了,直接学习串口如何配置开始为妥&…...
[数据集][目标检测]脑溢血检测数据集VOC+YOLO格式767张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):767 标注数量(xml文件个数):767 标注数量(txt文件个数):767 标注类别…...
如何借VR之手,让展厅互动更精彩?
VR虚拟现实技术以其卓越的沉浸式体验为特点,引领用户踏入一个全新的虚拟世界,正因如此,它开始被广泛应用于展厅、商业等多个领域。那么,今天,让我们就来了解一下这种技术是如何为展厅带来精彩互动体验的吧!…...
微信小程序如何使用地图
微信小程序使用地图功能时,主要涉及到地图组件的引入、配置、以及相关的API调用。以下是一个详细的使用指南: 1. 引入地图组件 在微信小程序的.wxml文件中,通过<map>标签引入地图组件。你可以设置地图的经纬度、缩放级别、控件等属性…...
力扣 287. 寻找重复数
给定一个包含 n 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。你设计的解决方案必须 不修改 数组 nums 且只用常量…...
怎样清理Mac存储空间 苹果电脑内存不够用怎么办 苹果电脑内存满了怎么清理
在使用 Mac 电脑的过程中,用户经常会遇到磁盘空间不足的困扰,这时候就需要寻找有效的方法来清理苹果电脑内存了。 清理Mac存储空间可以通过多种方法进行,以确保你的Mac能够高效运行并释放宝贵的存储空间。以下是一些有效的清理和优化方法&am…...
网络遗忘权的实现方法
网络遗忘权的实现方法 目录 从禁书说起 从销毁硬件信息的方法得到的启示 现在网络遗忘权的实现方法 从禁书说起 古代有禁书的需求,直接的方法就是贴出告示,强行收缴,然后付之一炬. 这个方法的问题在于只要有一个人敢冒死藏书,再次手抄或者是印刷,就 会让之前的禁书努力,付…...
【Python内功心法】:深挖内置函数,释放语言潜能
文章目录 🚀一、常见内置函数🌈二、高级内置函数⭐1. enumerate函数👊2. eval函数❤️3. exec函数💥4. eval与exec 中 globals与locals如何用☔4-1 globals 参数🎬4-2 locals 参数 ❤️5. filter函数👊6. z…...
JS-09-es6常用知识1
目录 1 模板字符串 1.1 模板字符串基本用法 1.2 模板字符串解决了一些痛点 2 解构赋值 2.1 对象的解构赋值 2.2 函数参数的解构赋值 2.3 补写:属性的简写 3 rest参数 3.1 arguments 3.2 rest参数 3.3 补充:判断数据类型 4 箭头函数 4.1 …...
SpringBoot 基础之自动配置
SpringBoot 自动配置 SpringBoot 通过 自动配置 简化了大量的繁复的配置信息。 启动类 Application 中有两处特别之处: 注解:SpringBootApplication run 方法:SpringApplication.run(…) SpringBootApplication 注解至少等价于以下三个注…...
Oracle dblink 发现Network 等待事件的分析 enq: KO - fast object checkpoint
所有的sql 通过dblink 查询全部等待中, 同一个SQL 20多个session 在跑,等待事件network,可能怀疑是不是网络断开了,导致没有返回 执行sql 如下: BEGIN Xdblink ; END; 去到dblink 所在的db,发现20多个sql在…...
SpringMVC:向三大域对象存数据
1. 简介 Servlet中的三个域对象 请求域:request会话域:session应用域:application 主要是通过:setAttribute getAttribute方法来完成在域中数据的传递和共享。 点击跳转Servlet详细概念 // 向域中存储数据 void setAttribute(St…...
终极指南:Muzic数据增强技术PDAugment如何通过音高和时长调整提升模型性能
终极指南:Muzic数据增强技术PDAugment如何通过音高和时长调整提升模型性能 【免费下载链接】muzic 这是一个微软研究院开发的音乐生成AI项目。适合对音乐、音频处理以及AI应用感兴趣的开发者、学生和研究者。特点是使用深度学习技术生成音乐,具有较高的创…...
Babylon.js 官方Demo速查手册:按技术点分类的实战预览图+源码直达
Babylon.js 技术全景速查手册:从核心功能到高阶实战 当你第一次打开Babylon.js官网的Demo页面时,可能会被上百个案例晃花了眼。作为一款功能强大的Web3D引擎,它几乎涵盖了从基础渲染到高级特效的所有技术点。但问题来了:当你想实现…...
别再死记硬背了!用Synopsys DC和ICC搞懂数字IC设计全流程(附避坑清单)
数字IC设计实战:从Synopsys工具链透视高效学习路径 刚接触数字IC设计的工程师常陷入一个怪圈:背了大量DC和ICC命令,面对真实项目却无从下手。这就像背熟了菜谱却做不出佳肴——问题不在于记忆容量,而在于理解烹饪原理和规避操作误…...
400字节的前端奇迹:TinyEditor如何重新定义微型代码编辑体验
400字节的前端奇迹:TinyEditor如何重新定义微型代码编辑体验 【免费下载链接】TinyEditor A functional HTML/CSS/JS editor in less than 400 bytes 项目地址: https://gitcode.com/gh_mirrors/ti/TinyEditor 在前端开发的世界里,我们常常被功能…...
Phi-4-reasoning-vision-15B企业应用:HR招聘系统简历截图信息结构化提取
Phi-4-reasoning-vision-15B企业应用:HR招聘系统简历截图信息结构化提取 1. 企业招聘场景的痛点与解决方案 在传统HR招聘流程中,简历筛选是最耗时耗力的环节之一。特别是当候选人通过邮件、社交平台或招聘网站发送简历时,HR经常面临以下挑战…...
原神帧率解锁技术突破:从性能瓶颈到效能释放的全流程优化指南
原神帧率解锁技术突破:从性能瓶颈到效能释放的全流程优化指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 诊断性能瓶颈:揭开帧率限制的技术根源 识别帧率锁定…...
大麦抢票神器:3步轻松实现演唱会门票自动化抢购终极指南
大麦抢票神器:3步轻松实现演唱会门票自动化抢购终极指南 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到心仪演唱会门票而烦…...
5步让Windows 11提速51%:Win11Debloat深度净化指南
5步让Windows 11提速51%:Win11Debloat深度净化指南 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以简化和改善…...
OpCore Simplify:自动化OpenCore EFI配置的革命性工具
OpCore Simplify:自动化OpenCore EFI配置的革命性工具 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore Simplify是一款专为Hackinto…...
SolidWorks 与 CATIA 模型转换实战:从本地操作到云端解决方案
1. 为什么需要SolidWorks与CATIA模型转换 在机械设计领域,SolidWorks和CATIA就像两个说着不同语言的工程师。SolidWorks以其直观的操作界面和强大的参数化建模能力,成为中小企业和教育机构的首选工具。而CATIA则凭借在复杂曲面设计和高端制造领域的深厚积…...


