SpringBoot(二)—— yaml配置文件

news2024/12/28 2:10:46

接上篇,我们对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里;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于PyQt5的UI界面开发——多界面切换

介绍 最初&#xff0c;因为课设的缘故&#xff0c;我只是想做一个通过按键进行切面切换而已&#xff0c;但是我看网上资料里面仅是语焉不详&#xff0c;让我困惑的很&#xff0c;但后面我通过摸索才发现这件事实在是太简单了&#xff0c;因此我想要记录下来。 本博客将介绍如…

Virtualbox硬盘扩容

前言 有没有使用虚拟机安装操作系统的时候&#xff0c;虚拟硬盘一开始分配的虚拟硬盘空间不够用&#xff1f;在后期去扩容的伙伴们&#xff0c;下面我看看如何扩容virtualbox的虚拟硬盘&#xff1f; 重新分配虚拟硬盘大小 在virtualbox菜单选择【管理】-【工具】-【虚拟介质…

如何实现 MySQL 的读写分离?

面试题 你们有没有做 MySQL 读写分离&#xff1f;如何实现 MySQL 的读写分离&#xff1f;MySQL 主从复制原理的是啥&#xff1f;如何解决 MySQL 主从同步的延时问题&#xff1f; 面试官心理分析 高并发这个阶段&#xff0c;肯定是需要做读写分离的&#xff0c;啥意思&#x…

路由器的原理

✍作者&#xff1a;柒烨带你飞 &#x1f4aa;格言&#xff1a;生活的情况越艰难&#xff0c;我越感到自己更坚强&#xff1b;我这个人走得很慢&#xff0c;但我从不后退。 &#x1f4dc;系列专栏&#xff1a;网路安全入门系列 目录 路由器的原理一&#xff0c;路由器基础及相关…

学习C++:标识符命名规则

标识符命名规则&#xff1a; 作用&#xff1a;C规定给标识符&#xff08;变量、常量&#xff09;命名时&#xff0c;有一套自己的规则 标识符不能是关键字 标识符只能由字母、数字、下划线组成 第一个字符必须为字母或下划线 标识符中字母区分大小写 &#xff08;给标识符命…

Git如何设置和修改当前分支跟踪的上游分支

目录 前言 背景 设置当前分支跟踪的上游分支 当前分支已有关联&#xff0c;删除其关联&#xff0c;重新设置上游 常用的分支操作 参考资料 前言 仅做学习记录&#xff0c;侵删 背景 在项目开发过程中&#xff0c;从master新建分支时&#xff0c;会出现没有追踪的上游分…

【数据科学导论】第一二章·大数据与数据表示与存储

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;数据处理与分析_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言…

LeetCode - Google 校招100题 第8天 图(Graph) (2题)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144744820 LeetCode 合计最常见的 112 题: 校招100题 第1天 链表(List) (19题)校招100题 第2天 树(Tree) (21题)校招100题 第3天 动态规划(DP) (20题)

五分钟学会如何在GitHub上自动化部署个人博客(hugo框架 + stack主题)

上一篇文章&#xff1a; 10分钟学会免费搭建个人博客&#xff08;Hugo框架 stack主题&#xff09; 前言 首先&#xff0c;想要实现这个功能的小伙伴需要完成几个前置条件&#xff1a; 有一个GitHub账号安装了git&#xff0c;并可以通过git推送commit到GitHub上完成第一篇文章…

kubernetes Gateway API-部署和基础配置

文章目录 1 部署2 最简单的 Gateway3 基于主机名和请求头4 重定向 Redirects4.1 HTTP-to-HTTPS 重定向4.2 路径重定向4.2.1 ReplaceFullPath 替换完整路径4.2.2 ReplacePrefixMatch 替换路径前缀5 重写 Rewrites5.1 重写 主机名5.2 重写 路径5.2.1 重新完整路径5.2.1 重新部分路…

操作002:HelloWorld

文章目录 操作002&#xff1a;HelloWorld一、目标二、具体操作1、创建Java工程①消息发送端&#xff08;生产者&#xff09;②消息接收端&#xff08;消费者&#xff09;③添加依赖 2、发送消息①Java代码②查看效果 3、接收消息①Java代码②控制台打印③查看后台管理界面 操作…

使 el-input 内部的内容紧贴左边

<el-inputv-model"form.invitor"placeholder"PC端的自动取当前账号的手机号"readonlyclass"no-border-input" />::v-deep(.no-border-input .el-input__inner) { border: none; box-shadow: none; padding-left: 0; /* 确保内容紧贴左边 *…

服务器分区与挂载(新手友好)

本文为实习期间项目实施心得分享在此供各位实习生使用 安装Centos7.9 1>这里选择上面的安装Centos7 2>回车后,等待到这个画面.选择你的语言 3>时区和语言自己按需选择 4>我们本次采取最小化安装只需要改这两个地方 1>选择INSTALLATION DESTINATION 这一步进行…

Docker-构建自己的Web-Linux系统-镜像webtop:ubuntu-kde

介绍 安装自己的linux-server,可以作为学习使用&#xff0c;web方式访问&#xff0c;基于ubuntu构建开源项目 https://github.com/linuxserver/docker-webtop安装 docker run -d -p 1336:3000 -e PASSWORD123456 --name webtop lscr.io/linuxserver/webtop:ubuntu-kde登录 …

spring专题笔记(六):bean的自动装配(自动化注入)-根据名字进行自动装配、根据类型进行自动装配。代码演示,通俗易懂。

目录 一、根据名字进行自动装配--byName 二、根据类型进行自动装配 byType 本文章主要是介绍spring的自动装配机制&#xff0c; 用代码演示spring如何根据名字进行自动装配、如何根据类型进行自动装配。代码演示&#xff0c;通俗易懂。 一、根据名字进行自动装配--byName Us…

深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223

深入探讨 Go 中的高级表单验证与翻译&#xff1a;Gin 与 Validator 的实践之道 在现代后端开发中&#xff0c;表单验证是保证数据完整性和服务稳定性的核心环节。如何优雅、高效地实现表单验证&#xff0c;同时提供人性化的错误提示&#xff0c;是每位开发者的必修课。在本文中…

UE5 渲染管线 学习笔记

兰伯特 SSS为散射的意思 带Bias的可以根据距离自动切换mip的卷积值 而带Level的值mipmaps的定值 #define A8_SAMPLE_MASK .a 这样应该就很好理解了 这个只采样a通道 带Level的参考上面的 朝左上和右下进行模糊 带Bias参考上面 随机数 4D 3D 2D 1D HLSL内置UV HLSL内置鼠标坐…

【Kubernetes 指南】基础入门——Kubernetes 基本概念(二)

目录 二、Pod 1、Pod 简介 2、Pod 图示 3、nginx 容器 二、Pod 1、Pod 简介 - Kubernetes 使用 Pod 来管理容器&#xff0c;每个 Pod 可以包含一个或多个紧密关联的容器。 - Pod 是一组紧密关联的容器集合&#xff0c;它们共享 PID、IPC、Network 和 UTS namespace&#…

基于高德地图js api实现掩膜效果 中间矢量 周围卫星图

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>管网服务</title><style>html,body,#ma…

【EI会议征稿】人工智能与遥感应用国际会议 (AIRSA 2025)

第一届人工智能与遥感应用国际学术会议&#xff08;AIRSA 2025&#xff09;将于2025年3月14-17日在中国长沙召开。会议聚焦人工智能与遥感技术应用&#xff0c;旨在为参会专家、学者和相关研究人员提供一个共享科研成果&#xff0c;拓宽研究思路&#xff0c;探索前沿技术&#…