SpringBoot 学习(二)配置
2. SpringBoot 配置
2.1 配置文件类型
- 配置文件用于修改 SpringBoot 的默认配置。
2.1.1 properties 文件
-
**properties ** 是属性文件后缀。
-
文件名:application.properties
-
只能保存键值对。
-
基础语法:key=value
name=why
-
注入配置类
@Component // 声明为 Spring 组件 @PropertySource(value = "classpath:config.properties") public class Person {@Value("${name}")private String name; }
需要在 IDEA 的 settings --> FileEncodings 中设置编码格式为 UTF-8。
2.1.2 yaml 文件
-
yaml 是一个可读性高,用来表达数据序列化的格式。
-
文件名:application.yml 或 application.yaml
-
能保存键值对、对象和表达式。
-
基础语法:key: 空格 value
# 键值对 name: why# 对象 student:name: whyage: 20student: {name: why,age: 20}# 数组 pets: - cat- dog- pigpets: [cat,dog,pig]# 表达式 dog:name: ${siri:siri}_旺财
-
注入配置类
-
导入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional> </dependency>
-
映射到类
@Component // 声明为 Spring 组件 @ConfigurationProperties(prefix = "person") // 映射配置文件的值到组件 public class Person {...}
-
2.1.3 配置注入比较
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 指定注入配置文件中的属性 |
松散绑定 | √ | × |
SpEL | √ | √ |
JSR303 数据校验 | √ | × |
复杂类型封装 | √ | × |
(1) 松散绑定
-
yaml 文件中的 dog-name 可以为类中的 dogName 赋值
dog:dog-name: 富贵dog-age: 3
@Component @ConfigurationProperties(value = "dog") public class Dog {private String dogName;private Integer dogAge; }
(2) JSR303数据校验
● 检查属性的数据格式。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
person:email: 123456
@Component // 声明为 Spring 组件
@Validated // 数据格式校验
@ConfigurationProperties(prefix = "person") // 映射配置文件的值到组件
public class Person {@Email(message = "邮箱格式错误")private String email;
}
检查结果:default message [邮箱格式错误];
● 数据格式检查常用注解
Maven:jakarta.validation:jakarta.validation-api:2.0.2
注解 | 作用类型 | 解释 |
---|---|---|
@NotNull | 任何类型 | 属性不能为null |
@NotEmpty | 集合 | 集合不能为null,且size大于0 |
@NotBlanck | 字符串、字符 | 字符类不能为null,且去掉空格之后长度大于0 |
@AssertTrue | Boolean、boolean | 布尔属性必须是true |
@Min | 数字类型(原子和包装) | 限定数字的最小值(整型) |
@Max | 同@Min | 限定数字的最大值(整型) |
@DecimalMin | 同@Min | 限定数字的最小值(字符串,可以是小数) |
@DecimalMax | 同@Min | 限定数字的最大值(字符串,可以是小数) |
@Range | 数字类型(原子和包装) | 限定数字范围(长整型) |
@Length | 字符串 | 限定字符串长度 |
@Size | 集合 | 限定集合大小 |
@Past | 时间、日期 | 必须是一个过去的时间或日期 |
@Future | 时期、时间 | 必须是一个未来的时间或日期 |
字符串 | 必须是一个邮箱格式 | |
@Pattern | 字符串、字符 | 正则匹配字符串 |
2.2 配置文件路径
2.2.1 路径优先级
-
优先级从高到低排序
-
file
为项目目录,classpath
为资源目录,即resources
(1)
file:./config/
(2)
file:./
(3)
classpath:/config/
(4)
classpath:/
-
2.2.2 多环境配置
- 整合线上、测试或者其他用途的环境配置。
properties 文件
-
application.properties
spring.profiles.active=test
-
application-test.properties
server.port=8081
-
application-dev.properties
server.port=8082
yaml 文件
-
application.yml
server:port: 8080 spring:profiles: test --- server:port: 8081 spring:profiles: test --- server:port: 8082 spring:profiles: dev
2.3 配置文件内容
- 配置文件中的内容都基于
xxxAutoConfiguration
绑定并装配的xxxProperties
类。- 开发者编写配置文件,给
xxxProperties
类属性赋值。 xxxAutoConfiguration
使用xxxProperties
类属性修改配置默认值。
- 开发者编写配置文件,给
- 配置文件 -->
xxxProperties
-->xxxAutoConfiguration
--> 修改配置默认值
2.4 总结
-
SpringBoot 启动会加载大量自动配置类,
-
检查 SpringBoot 默认的自动配置类中是否含有所需配置组件,若没有则需手动添加。
-
手动添加组件时,SpringBoot 从 Properties 类中获取某些属性,在配置文件中指定这些属性的值即可实现自动装配。
-
xxxAuotoConfiguration:自动配置类;
xxxProperties:封装配置文件的相关属性;
xxx.yml:为属性赋值,完成配置。
-
debug: ture
:日志打印配置。
相关文章:

SpringBoot 学习(二)配置
2. SpringBoot 配置 2.1 配置文件类型 配置文件用于修改 SpringBoot 的默认配置。 2.1.1 properties 文件 **properties ** 是属性文件后缀。 文件名:application.properties 只能保存键值对。 基础语法:keyvalue namewhy注入配置类 Component //…...
西门子828d授权密钥破解经验分享 I7I54833762
操作数组的方法 Array.prototype.toSorted(compareFn) //返回一个新数组,其中元素按升序排序,而不改变原始数组。 Array.prototype.toReversed() //返回一个新数组,该数组的元素顺序被反转,但不改变原始数组。 Array.prototype.to…...
06贪心:跳跃游戏
06贪心:跳跃游戏 55. 跳跃游戏 刚看到本题一开始可能想:当前位置元素如果是 3,我究竟是跳一步呢,还是两步呢,还是三步呢,究竟跳几步才是最优呢? 其实跳几步无所谓,关键在于可跳的…...
鄙视测试,理解测试,成为测试
首先,其实题主的问题还是很实诚的,我刚开始做测试的时候其实也是这个心态,想转开发,也学习了很多的语言,个人觉得这是职业危机感的表现,挺好的,也相信题主不管去做开发和测试都会去不断的学习和…...

MySQL数据库基础知识要点总结
目录 前言 一.数据库构成 1.1 表 1.2 关系 1.3 索引 1.4 查询语言 1.5 数据库管理系统 二.数据类型 2.1 整数 2.2 浮点 2.3 日期与时间 2.4 字符串 三.约束条件 3.1 主键约束 3.2 唯一约束 3.3 外键约束 3.4 非空约束 3.5 默认值约束 总结 前言 数据库是…...

基础运维(一)YUM仓库
一 自定义YUM仓库 1 Yum仓库特点 作为yum源需要准备的内容 大量的rpm 软件安装包文件针对这些软件包的 repodata/ 仓库档案 repodata/ 仓库档案数据 filelists.xml.gz // 软件包的文件安装清单primary.xml.gz // 软件包的基本/主要信息other.xml.gz // 软件包…...

递归算法讲解,深度理解递归
首先最重要的就是要说明递归思想的作用,在后面学习的高级数据接口,树和图中,都需要用到递归,即深度优先搜索,如果递归掌握的不好,后面的数据结构将举步为艰。 加油 首先看下如何下面两个方法有什么区别&a…...

网络通信(套接字通信)(C/C++)
1.网络编程必知概念 1.广域网和局域网 广域网:又称外网、公网。是连接不同地区局域网或城域网进行计算机通信的远程公共网络。 局域网:在一定的通信范围内,有很个多计算机组成的私有网络就叫局域网。(这些计算机相互之间是可以通信的,但是不能直接访问外网(可以通过网线…...

anaconda navigator启动时一直卡在 loading applications 页面
anaconda navigator启动时一直卡在 loading applications 页面 方法1 在安装目录找到D:\anaconda\Lib\site-packages\anaconda_navigator\api 然后打开conda_api.py, 在1358行找到data yaml.load(f),将其改为data yaml.safeload(f) 猜测为保证代码…...

力扣刷题-链表-删除链表的倒数第N个节点
19.删除链表的倒数第N个节点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 示例 2:输入:head [1], n 1 输出&…...

Blender DreamUV插件使用简明教程
DreamUV 是一个可让你在Blender的 3D 视口中操纵 UV的工具集合。 该工具集设计用于可重复使用的纹理,例如平铺纹理、装饰表和纹理图集。 其目的是让你无需退出 3D 视图即可对几何体进行纹理处理,从而节省时间并提高灵活性。 1、安装DreamUV 首先下载为…...

AI在线工具分享
1、ChatGPT ChatGPT是一种由OpenAI训练的大型语言模型。它的原理是基于Transformer架构,通过预训练大量文本数据来学习如何生成人类可读的文本,然后通过接受输入并生成输出来实现对话。 ChatGPT的用途非常广泛,可以用于自然语言处理…...
Matlab批量处理测试数据的方法:以VCO的调谐测试曲线处理为例
我们都知道得到的VCO调谐曲线是一根一根扫出来的,如果要手动对数据进行处理很麻烦。 (当然最好是搭建一个自动化测试平台,一边测试一边把数据抓取了,这个以后可以搞一下再更新) 目前还是手动测量的情况下,…...

VScode断点调试vue
VScode断点调试vue 1、修改launch.js文件(没有这个文件就新建)。 {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlin…...
20吨屠宰鸡鸭鹅一体化污水处理设备加工厂家
20吨屠宰鸡鸭鹅一体化污水处理设备加工厂家 溶气气浮机主要构造说明 气浮系统气浮系统集进水、絮凝、分离、集水、出水于一体,与传统气浮设备类似,设有一个稳流室、溶气释放室,使处理性能更稳定,效果更优越。 稳定室:通…...
android被杀以后fragments缓存重建问题和测试方法
这个问题,其实不是太好复现。因为在android的缓存Fragment机制是写在androidx的库中。 主要的原因是android Framework机制: framework at yourpackage.onSaveInstanceState(XXXActivity.kt:118) at android.app.Activity.performSaveInstanceState(A…...

Visual Studio 2017 安装
C自学精简实践教程 目录(必读) 这篇文章会保证你第一次安装VS2017就成功运行Hello World! 下载Visual Studio Installer Gitee 下载 VS2017/vs2017_Community.exe CalmReason/VisualStudio - 码云 - 开源中国 (gitee.com) 百度云下载 链接:https://pan.baidu…...
day5|242.有效的字母异位词、349. 两个数组的交集
242.有效的字母异位词 题目链接:https://leetcode.cn/problems/valid-anagram/ 文章链接:https://programmercarl.com/0242.%E6%9C%89%E6%95%88%E7%9A%84%E5%AD%97%E6%AF%8D%E5%BC%82%E4%BD%8D%E8%AF%8D.html 视频链接:https://www.bilibili.…...

【Python基础】常用模块学习:sys|os|pytest
📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...

【煤矿虚拟仿真体验】VR采煤机技能培训有效提高训练效果
在我们的社会中,能源是至关重要的。它是推动我们日常生活和工作的主要动力。然而,我们在获取这种能源的过程中,也带来了许多环境问题。煤矿开采是其中的一个重要部分,因此我们需要寻找更环保、更安全的方式来进行煤矿开采。VR&…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...