SpringBoot(二)—— yaml配置文件

embedded/2024/12/28 4:55:04/

接上篇,我们对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 类定义

java">@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {// 使用@Email注解校验邮箱格式@Emailprivate String name;// 可以注入字面量、环境变量、配置文件中的值或SpEL表达式// @Value("${person.last-name}") 从配置文件中获取lastName的值// 可以注入字面量或SpEL表达式计算的值// @Value("#{11*2}") 将age字段设置为22// 可以注入字面量或配置文件中的布尔值// @Value("true") 设置boss字段为trueprivate 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 默认值占位符

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

java">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 引用其他配置值的占位符

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

java">#如果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: 8085spring:profiles:active: dev # 当需要哪个环境配置的时候,只需要在这里修改值。---
# 这个代表第二个文档块
server:port: 8086spring:profiles: dev # 指定dev,代表开发环境---
# 这个代表第三个文档块
server:port: 8087spring: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里;


http://www.ppmy.cn/embedded/149364.html

相关文章

mysql进阶

存储引擎 MySQL体系结构&#xff1a; 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表而不是基于库的&#xff0c;所以存储引擎也可以被称为表引擎。 默认存储引擎是InnoDB。 相关操作&#xff1a; -- 查询建表语句 show create table ac…

如何选择最佳时间进行WordPress网站维护避免流量损失

网站维护是每个站长都会遇到的常规任务&#xff0c;但维护时间的选择却至关重要。选择不当的时间可能会导致流量损失和用户流失&#xff0c;而合理的维护时间则可以将这些影响降到最低。本文将教您如何使用Google Analytics和MonsterInsights等工具&#xff0c;找到网站访问量最…

“电找车“ | 助力移动充电机器人快速落地

近些年&#xff0c;随着新能源汽车保有量的提升&#xff0c;给车充电经常成为困扰车主的一大问题。 据中国电动汽车充电基础设施促进联盟发布的数据显示&#xff0c;2024年上半年&#xff0c;充电基础设施增量为164.7万台&#xff0c;同比上升14.2%&#xff1b;桩车增量比为1:3…

【UE5 C++课程系列笔记】12——Gameplay标签的基本使用

目录 概念 主要作用 1 组织与分类游戏元素 1.1 驱动游戏逻辑 1.2 便于查询与筛选 2 助力网络同步与优化 定义Gameplay标签 1 在项目设置中添加标签 2 从数据表资产导入标签 3 使用C定义标签 3.1 UE_DECLARE_GAMEPLAY_TAG_EXTERN 3.2 UE_DEFINE_GAMEPLAY_TAG 3.3 …

选择屏幕的用法

**************************定义控件*********************************** SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-002. SELECT-OPTIONS bukrs FOR iloa-bukrs . "公司代码 SELECT-OPTIONS swerk FOR iloa-swerk OBLIGATORY . "工厂 SELECT-O…

基于Spring Boot的旅游推荐系统

一、系统背景与意义 随着旅游业的快速发展&#xff0c;旅游信息在种类和数量上不断增多&#xff0c;管理难度也在增大。基于Spring Boot的旅游推荐系统旨在解决这一问题&#xff0c;通过收集、处理和分析旅游数据&#xff0c;为用户推荐符合其偏好和需求的旅游线路&#xff0c…

每天40分玩转Django:实操在线商城

实操在线商城 一、今日学习内容概述 模块重要程度主要内容商品模型⭐⭐⭐⭐⭐商品信息、分类管理购物车系统⭐⭐⭐⭐⭐购物车功能实现订单系统⭐⭐⭐⭐⭐订单处理、支付集成用户中心⭐⭐⭐⭐订单管理、个人信息 二、模型设计 # models.py from django.db import models fro…

短视频运营行业该如何选择服务器?

在互联网快速发展的时代&#xff0c;短视频行业也应运而生&#xff0c;企业为了保证用户能够浏览流畅且稳定的短视频&#xff0c;则需要选择一台合适的服务器来运行相关业务&#xff0c;本文就来探讨一下短视频运营行业该如何选择服务器吧&#xff01; 短视频行业一般需要处理大…