SpringBoot(二)—— yaml配置文件

接上篇,我们对SpringBoot有了基本的了解,接下来探究配置文件。

目录

二、配置文件

1. SpringBoot热部署

2. 配置文件

2.1 配置文件的作用

2.2 YAML 配置文件

2.3 YAML 与 XML 比较

3. YAML语法

3.1 键值对

3.2 值的写法

3.3  对象/Map(键值对)

3.4 数组(List、Set)

4. 配置文件值注入

@Value获取值和@ConfigurationProperties获取值比较   

 4.1 配置文件注入值数据校验

5. 配置文件占位符

5.1 随机数占位符

5.2 默认值占位符

5.3 引用其他配置值的占位符

 6. 多配置文件

6.1 多Profile文件

6.2 yml支持多文档块方式

7. 配置文件加载顺序


二、配置文件

1. SpringBoot热部署

        spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。

引入依赖

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-devtools</artifactId> 
    <optional>true</optional> 
</dependency>

通过ctrl+f9来实施热部署。

2. 配置文件

Spring Boot 使用一个全局的配置文件来调整应用的行为和修改自动配置的默认值。配置文件名是固定的,通常有两个选项:

  • application.properties
  • application.yml

2.1 配置文件的作用

配置文件主要用于修改Spring Boot自动配置的默认值。Spring Boot在底层已经为我们自动配置好了很多设置,但通过配置文件,我们可以根据自己的需求进行调整。

2.2 YAML 配置文件

YAML(YAML Ain't Markup Language 或 YAML isn't Markup Language)是一个标记语言,它以数据为中心,比JSON、XML等格式更适合做配置文件。以下是YAML的一些特点:

  1. 可读性:YAML的格式更加直观和易于阅读,特别是对于复杂的配置数据。
  2. 简洁性:YAML允许使用缩进来表示层级关系,而不是像XML那样使用标签,这使得配置文件更加简洁。
  3. 灵活性:YAML支持多种数据类型,包括布尔值、列表、字典等,这使得它在表达配置数据时更加灵活。

2.3 YAML 与 XML 比较

  • XML:是一种标记语言,用于定义数据的结构和格式。XML配置文件通常包含大量的标签和属性,这使得文件体积较大,且可读性较差。
  • YAML:不是标记语言,它更注重数据本身,而不是数据的呈现方式。YAML文件通常更加简洁,易于编写和阅读。

3. YAML语法

YAML 使用简单的格式来表示复杂的数据结构,其基本语法包括键值对、对象、数组等。

3.1 键值对

  • 格式key: (空格) value
  • 要求:键和值之间必须有一个空格;通过空格的缩进来控制层级关系;左对齐的一列数据表示同一个层级。
  • 示例

3.2 值的写法

  • 字面量:普通的值(数字,字符串,布尔值)。
  • 字符串
    • 默认不需要引号。
    • 使用双引号""不会转义特殊字符。
    • 使用单引号''会转义特殊字符。
  • 示例
name: "zhangsan \n lisi"  # 输出:zhangsan 换行 lisi
name: 'zhangsan \n lisi'   # 输出:zhangsan \n lisi

3.3  对象/Map(键值对)

  • 格式:k: v:在下一行来写对象的属性和值的关系;注意缩进
  • 示例

3.4 数组(List、Set)

  • 格式:使用-后跟一个值来表示数组中的一个元素。
  • 行内写法:在一行内用逗号分隔数组元素。
  • 示例

行内写法:

4. 配置文件值注入

我们可以导入配置文件处理器,以后编写配置就有提示了

<!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐>
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring‐boot‐configuration‐processor</artifactId>
     <optional>true</optional>
</dependency>

@Value获取值和@ConfigurationProperties获取值比较   

什么是松散绑定?

比如我的yml中写的lastName,我们类中属性为last_name,这2个还是可以绑定起来的,不影响赋值。这就是松散绑定。

配置文件yml还是properties他们都能获取到值;

如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;

如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

 4.1 配置文件注入值数据校验

  • 使用@Component注解定义一个Spring组件,该组件用于从配置文件中注入属性值。
  • 使用@ConfigurationProperties注解将配置文件中的属性映射到Java类的字段上。prefix属性指定了配置文件中相关属性的前缀。
  • 使用@Validated注解启用对配置属性的校验。

Person 类定义

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
   // 使用@Email注解校验邮箱格式
   @Email
   private String name;

   // 可以注入字面量、环境变量、配置文件中的值或SpEL表达式
   // @Value("${person.last-name}") 从配置文件中获取lastName的值

   // 可以注入字面量或SpEL表达式计算的值
   // @Value("#{11*2}") 将age字段设置为22

   // 可以注入字面量或配置文件中的布尔值
   // @Value("true") 设置boss字段为true

   private Integer age;
   private Boolean boss;
   private Date birth;
   private Map<String, Object> maps;
   private List<Object> lists;
   private Dog dog;
}

此时会报如下错误:

5. 配置文件占位符

5.1 随机数占位符

Spring Boot 允许在配置文件中使用随机数生成器来为属性提供值。这可以通过 ${random.value}${random.int}${random.long} 等占位符实现。

  • ${random.value}:生成一个随机数。
  • ${random.int}:生成一个随机的整数。
  • ${random.long}:生成一个随机的长整数。
  • ${random.int(10)}:生成一个0到10之间的随机整数。
  • ${random.int[1024,65536]}:生成一个1024到65536之间的随机整数。

5.2 默认值占位符

如果配置文件中的某个属性没有被设置,可以使用默认值。这可以通过在占位符后面加上冒号和默认值来实现。

person.lastName=张三${random.uuid} #“张三”与一个随机生成的UUID拼接起来
person.age=${random.int} # 如果未设置,将使用一个随机整数
person.birth=2017/12/15 # 设置出生日期为2017年12月15日
person.boss=false # 设置boss属性为false
person.maps.k1=v1 # 在maps Map中,设置k1键的值为v1
person.maps.k2=14 # 在maps Map中,设置k2键的值为14
person.lists=a,b,c # 设置lists属性为包含"a", "b", "c"的列表

5.3 引用其他配置值的占位符

可以在配置文件中引用其他已经配置的值,如果该值不存在,则可以指定一个默认值。

#如果person.hello存在,则使用其值,否则使用"hello",然后加上"_dog"作为person.dog.name的值。
person.dog.name=${person.hello:hello}_dog 

#设置person.dog.age的值为15。
person.dog.age=15

 6. 多配置文件

6.1 多Profile文件

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml

默认使用application.properties的配置;

6.2 yml支持多文档块方式

# 这个代表第一个文档块
server:
  port: 8085

spring:
  profiles:
    active: dev # 当需要哪个环境配置的时候,只需要在这里修改值。

---
# 这个代表第二个文档块
server:
  port: 8086

spring:
  profiles: dev # 指定dev,代表开发环境
  
---
# 这个代表第三个文档块
server:
  port: 8087

spring:
  profiles: pro # 指定pro,代表生产环境

代码中一共有三个yml文档块,其中在没有配置spring:profiles:active的情况下,默认会使用第一个文档块的配置。当在配置的情况下,会根据配置的值去使用哪个yml文档块的配置。

注意:文档块以---分隔

测试:指定dev环境

7. 配置文件加载顺序

springboot默认读取的配置文件名字是:“application.properties”和“application.yml”,默认读取四个位置的文件:根目录下、根目录的config目录下、classpath目录下、classpath目录里的config目录下; 

配置文件的读取顺序
根目录/config/application.properties
根目录/config/application.yml
根目录/application.properties
根目录/application.yml
classpath目录/config/application.properties
classpath目录/config/application.yml
classpath目录/application.properties
classpath目录/application.yml

默认可读取的配置文件全部都会被读取合并,按照顺序读取配置,相同的配置项按第一次读取的值为准,同一个目录下properties文件比yml优先读取,通常会把配置文件放到classpath下,一般是resources里;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NFV架构

通信&#xff08;CT&#xff09;的NFV技术是借鉴了IT行业的云计算概念&#xff0c;实际大规模应用在4G时代。 区别是增加了以下几点 1、NFVI是openstack的电信增强版本&#xff0c;除了nova cinder nuetru等增加了电信专用组件。 2、设计增加了mano&#xff0c;包括了VIM、NFVO…

关于Edge浏览器的设置

这里记录几条个人比较习惯的使用浏览器方式的设置&#xff0c;主要是edge浏览器 1. 黑背景色 修改整个浏览器的背景色为黑色&#xff0c;而不是主题&#xff0c;只有边框颜色改变地址栏输入edge://flags/#enable-force-dark&#xff0c;将Default 改为 Enabled&#xff1b;如…

Elasticsearch:什么是查询语言?

查询语言定义 查询语言包括数据库查询语言 (database query language - DQL)&#xff0c;是一种用于查询和从数据库检索信息的专用计算机语言。它充当用户和数据库之间的接口&#xff0c;使用户能够管理来自数据库管理系统 (database management system - DBMS) 的数据。 最广…

Android使用PorterDuffXfermode模式PorterDuff.Mode.SRC_OUT橡皮擦实现马赛克效果,Kotlin(3)

Android使用PorterDuffXfermode模式PorterDuff.Mode.SRC_OUT橡皮擦实现马赛克效果&#xff0c;Kotlin&#xff08;3&#xff09; import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Canvas impor…

《信管通低代码信息管理系统开发平台》Linux环境安装说明

1 简介 信管通低代码信息管理系统应用平台提供多环境软件产品开发服务&#xff0c;包括单机、局域网和互联网。我们专注于适用国产硬件和操作系统应用软件开发应用。为事业单位和企业提供行业软件定制开发&#xff0c;满足其独特需求。无论是简单的应用还是复杂的系统&#xff…

jetson Orin nx + yolov8 TensorRT 加速量化 环境配置

参考【Jetson】Jetson Orin NX纯系统配置环境-CSDN博客 一 系统环境配置&#xff1a; 1.更换源&#xff1a; sudo vi /etc/apt/sources.list.d/nvidia-l4t-apt-source.list2.更新源&#xff1a; sudo apt upgradesudo apt updatesudo apt dist-upgrade sudo apt-get updat…

Burp炮台实现(动态ip发包)

基本步骤 1.使用 zmap 爬取大量代理ip 2.使用py1脚本初步筛选可用ip 3.利用py2脚本再次筛选对目标网站可用ip&#xff08;不带payload安全检测&#xff09; 4.配置 burp 插件并加载收集到的代理池 5.加载payload&#xff0c;开始爆破 Zmap kali安装 sudo apt update apt …

springboot495基于java的物资综合管理系统的设计与实现(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统物资综合管理系统信息管理难度大&#xff0c;容错率低&am…

STM32-笔记16-定时器中断点灯

一、实验目的 使用定时器 2 进行中断点灯&#xff0c;500ms LED 灯翻转一次。 二&#xff0c;定时器溢出时间计算 Tout&#xff1a;定时器溢出时间 Ft&#xff1a;定时器的时钟源频率 ARR&#xff1a;自动重装载寄存器的值 PSC&#xff1a;预分频器寄存器的值 例如&#xff0c…

【MySQL】 SQL优化讲解

一、优化前的思考 在定位到慢查询后&#xff0c;面试官常问如何优化或分析慢查询的SQL语句。若存在聚合查询、多表查询&#xff0c;可尝试优化SQL语句结构&#xff0c;如多表查询可新增临时表&#xff1b;若表数据量过大&#xff0c;可添加索引&#xff0c;但添加索引后仍慢则…

C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码

一、介绍 栈和队列是限定插入和删除只能在表的“端点”进行的线性表&#xff0c;是线性表的子集&#xff0c;是插入和删除位置受限的线性表。 &#xff08;操作受限的线性表&#xff09; 二、栈 1&#xff09;概念&#xff1a; 栈(stack)是一个特殊的线性表&#xff0c;是限…

【HarmonyOS应用开发——ArkTS语言】购物商城的实现【合集】

目录 &#x1f60b;环境配置&#xff1a;华为HarmonyOS开发者 &#x1f4fa;演示效果&#xff1a; &#x1f4d6;实验步骤及方法&#xff1a; 1. 在src/main/ets文件中创建components文件夹并在其中创建Home.ets和HomeProduct.ets文件。​ 2. 在Home.ets文件中定义 Home 组…

连锁餐饮行业数据可视化分析方案

引言 随着连锁餐饮行业的迅速发展&#xff0c;市场竞争日益激烈。企业需要更加精准地把握运营状况、消费者需求和市场趋势&#xff0c;以制定科学合理的决策&#xff0c;提升竞争力和盈利能力。可视化数据分析可以帮助连锁餐饮企业整合多源数据&#xff0c;通过直观、动态的可…

学习threejs,THREE.RingGeometry 二维平面圆环几何体

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.RingGeometry 圆环几…

计算机网络实验室建设方案

一、计算机网络实验室拓扑结构 计算机网络综合实验室解决方案&#xff0c;是面向高校网络相关专业开展教学实训的综合实训基地解决方案。教学实训系统采用 B&#xff0f;S架构&#xff0c;通过公有云教学实训平台在线学习模式&#xff0c;轻松实现网络系统建设与运维技术的教学…

ThinkPHP 8开发环境安装

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《ThinkPHP 8高效构建Web应用 夏磊 编程与应用开发丛书 清华大学出版社》【摘要 书评 试读】- 京东图书 1. 安装PHP8 Windows系统用户可以前往https://windows.php.net/downloads/releases/archives/下载PHP 8.0版本&am…

Nmap基础入门及常用命令汇总

Nmap基础入门 免责声明&#xff1a;本文单纯分享技术&#xff0c;请大家使用过程中遵守法律法规~ 介绍及安装 nmap是网络扫描和主机检测的工具。作为一个渗透测试人员&#xff0c;必不可少的就是获取信息。那么nmap就是我们从互联网上获取信息的途径&#xff0c;我们可以扫描互…

使用openvino加速部署paddleocr文本方向分类模型(C++版)

使用openvino加速部署paddleocr文本方向分类模型(C++版) 大体流程方向分类器在openvino上的部署代码C++大体流程 原始图像: 先resize 再归一化 方向分类器在openvino上的部署代码C++ #include <iostream> #include <string>#include <vector> #i…

嵌入式单片机窗口看门狗控制与实现

窗口看门狗 注意:WWDG外设没有独立的时钟源,而是挂载在APB1总线下,APB1总线外设时钟为42MHZ。 了解WWDG外设的使用流程,可以参考stm32f4xx_wwdg.c的开头注释,具体流程如下图所示

【KLEE】源码阅读笔记----KLEE执行流程

本文架构 1. 动机2.KLEE简介3.KLEE的代码工程结构4. 从KLEE主函数入手main函数step1: 初始化step2&#xff1a;加载.bc文件进行符号执行 读取测试用例输出日志信息 1. 动机 最近准备对KLEE进行修改使其符合我的需要&#xff0c;因此免不了需要对源码进行修改。读懂源码是对在其…