源码基于SpringBoot 2.4.4

1、认识配置文件

1.1 配置文件的加载

创建SpringBoot项目的时候,会自动创建一个application.properties文件,该文件是SpringBoot默认的配置文件。

SpringBoot在启动的时候会默认去寻找并加载application.properties文件和application.yaml文件,在以下路径中寻找:

(1)classpath目录下

(2)classpath目录下的config文件夹

(3)项目根目录

(4)项目根目录下config文件夹的子文件夹

(5)项目根目录下config文件夹

优先级从高到低,并且后加载的会覆盖前面加载的。

参考官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config.files

1.2 配置文件类型

(1)properties后缀:application.properties

(2)yaml后缀:application.yaml

1.3 两种配置文件比较

  • 可以使用 @PropertySource 注解加载自定义的 Properties 配置文件,但无法加载自定义的 YAML 文件。
  • YAML 支持列表的配置,而 Properties 不支持。
  • 配置文件加载顺序:properties、xml、yml、yaml(后加载的会覆盖前面加载的)

2、yaml配置文件

2.1 介绍

YAML 是 "YAML Ain't Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。

非常适合用来做以数据为中心的配置文件

2.2 基本语法

(1)key: value。冒号与value之间必须有一个空格

(2)大小写敏感。

(3)使用缩进表示层级关系。

(4)缩进不允许使用tab,只能使用空格。

(5)缩进的空格数不重要,只要相同层级的元素左对齐即可。

(6)# 后面跟注释内容

(7)字符串无须加引号。""会进行转义。比如'\n'就输出\n,但"\n"则会输出换行。

2.3 数据类型

(1)字面量:单个的、不可再分的值。date、boolean、string、number、null

k: v

(2)对象:键值对的集合。map、hash、set、object

# 行内写法
k: {k1:v1,k2:v2,k3:v3}
# 或
k:
k1: v1
k2: v2
k3: v3

(3)数组:一组按次序排列的值。array、list、queue

# 行内写法
k: [v1,v2,v3]
# 或
k:
- v1
- v2
- v3

2.4 实例

定义两个实体类PersonPet,并且Person类和配置文件的属性绑定

@Data
@ConfigurationProperties(prefix = "my-person")
@Component
public class Person {
private String userName;
private Boolean boss;
private Date birth;
private Integer age;
private Pet pet;
private String[] interests;
private List<String> animal;
private Map<String, Object> score;
private Set<Double> salarys;
private Map<String, List<Pet>> allPets;
} @Data
public class Pet {
private String name;
private Double weight;
}

在yaml文件中配置Person的属性

my-person:
user-name: CodeTiger
boss: true
birth: 1996/11/29
# 可以使用random来生成各种不同类型的随机值
age: ${random.int}
pet:
name: tomcat
weight: 100
interests: [basketball, football]
animal:
- jerry
- tom
score:
english:
first: 30
second: 40
third: 50
math: [131,140,148]
chinese: {first: 128, second: 136}
salarys: [3999,4999.98,5999.99]
allPets:
sick:
- {name: tom}
- {name: jerry,weight: 47}
health: [{name: mario,weight: 47}]

2.5 开启自动提示

我们的类和配置文件属性绑定时,在配置文件中设置属性发现并没有自动提示。在我们为类加上@ConfigurationProperties注解的时候,idea就会提示我们配置Annotation Processor

https://docs.spring.io/spring-boot/docs/2.4.4/reference/html/appendix-configuration-metadata.html#configuration-metadata-annotation-processor

根据文档,我们只需要在pom.xml中增加相关的jar包即可。

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

在打包的时候,我们不需要把它打入jar包,所以去除

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>

3、使用yaml实现多环境配置

我们可以把多个环境的配置写在一个文件里,可以使用符号---进行分割,如下application.yaml文件

spring:
profiles:
# 使用开发环境的配置
active: dev
---
# 开发环境配置
server:
port: 8888
spring:
profiles: dev
---
# 生产环境配置
server:
port: 8888
spring:
profiles: prod

也可以不同的开发环境写在不同的配置文件,比如在resources目录下创建两个配置文件:application-dev.ymlapplication-prod.yml 此时,分别表示开发环境中的配置和生产环境中的配置。

然后在application.yaml文件中指定使用哪个配置文件即可。

我们还可以通过在代码中指定使用哪种环境的配置

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder; @SpringBootApplication
public class TestApplication { public static void main(String[] args) {
SpringApplicationBuilder builder = new SpringApplicationBuilder(TestApplication.class);
builder.application().setAdditionalProfiles("dev");
builder.run(args);
}
}

当然也可以在使用命令启动jar包的时候指定

java -jar xxx.jar --spring.profiles.active=dev

SpringBoot2配置文件application.yaml的更多相关文章

  1. SpringBoot配置文件 application.properties,yaml配置

    SpringBoot配置文件 application.properties,yaml配置 1.Spring Boot 的配置文件 application.properties 1.1 位置问题 1.2 ...

  2. application.yaml配置文件

    spring boot还支持yaml格式的配置文件.这种格式文件是JSON超集文件格式,其以数据为中心,扩展名可是是yml和yaml. yaml格式文件以key/value的格式配置属性,使用缩进控制 ...

  3. Spring Boot 中配置文件application.properties使用

    一.配置文档配置项的调用(application.properties可放在resources,或者resources下的config文件夹里) package com.my.study.contro ...

  4. spring boot 配置文件application

    场景:在项目部署的过程中,对于spring boot的配置文件一直不很了解,直到项目出现一个莫名其妙的问题——工程classes中的配置文件被覆盖,程序启动总是报错! 1  配置文件的优先级 appl ...

  5. SpringBoot配置(1) 配置文件application&yml

    SpringBoot配置(1) 配置文件application&yml 一.配置文件 1.1 配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的. application ...

  6. 【springBoot】之配置文件application

    springboot使用一个全局的配置文件application.properties或者是application.yml,放在在src/main/recesources下或者在类路径下的/confi ...

  7. Spring Boot项目的Logback配置文件使用yaml格式

    1.普通的Spring项目使用logback默认用properties文件做为配置变量. 2.如果非要用yaml文件,那么可以转成Spring Boot项目,天生无缝结合 3.没办法,如果项目配置文件 ...

  8. SpringBoot配置文件 application.properties详解

    SpringBoot配置文件 application.properties详解   本文转载:https://www.cnblogs.com/louby/p/8565027.html 阅读过程中若发现 ...

  9. flutter如何使用配置文件pubspec.yaml(位于项目根目录)来管理第三方依赖包

    官方文档 在软件开发中,很多时候有一些公共的库或SDK可能会被很多项目用到,因此,将这些代码单独抽到一个独立模块,然后哪个项目需要使用时再直接集成这个模块,便可大大提高开发效率.很多编程语言或开发工具 ...

随机推荐

  1. javaScript的成长之路【何为函数,面向对象又是啥!!!】

  2. 一个或多个listeners启动失败,更多详细信息查看对应的容器日志文件

    碰到这个问题很多次,每次碰到都是去百度找.但是,不尽人意,好在最后还是解决了,所以写下总结. 报错内容: org.apache.catalina.core.StandardContext.startI ...

  3. JAVA中Abstract到底有什么用?都用在哪些方面比较合适?

    功能向上聚合 Abstract作为抽象类和抽象方法,第一种情况是在聚合子类的通用性上起到作用,往往出现在重构过程中自然而然形成的一种层次结构-希望将多个子类的通用方法和逻辑提取到父层的抽象类. 这种重 ...

  4. [c++] 如何流畅地读写代码

    代码不同于普通文字,阅读时注意两方面: 符号含义:相同符号,上下文不同时含义也不同,如*和& 阅读顺序:不总是按从左往右顺序阅读的,有时要倒着读或者跳着读逻辑才通顺 适当省略:有些内容虽然写了 ...

  5. sed -i 's/Search_String/Replacement_String/g' Input_File sed详细手册

    本文列出的十五个例子可以帮助你掌握 sed 命令.如果要使用 sed 命令删除文件中的行,去下面的文章.注意:由于这是一篇演示文章,我们使用不带 -i 选项的 sed 命令,该选项会在 Linux 终 ...

  6. 7.12-7.19 id、w、who、last、lastb、lastlog

    7.12-7.19 id.w.who.last.lastb.lastlog 目录 7.12 id:显示用户与用户组的信息 7.13 w:显示已登录用户信息 7.14 who:显示已登录用户信息 显示最 ...

  7. Ansible_编写循环和条件任务

    一.利用循环迭代任务 1️⃣:Ansible支持使用loop关键字对一组项目迭代任务,可以配置循环以利用列表中的各个项目.列表中各个文件的内容.生成的数字序列或更为复杂的结构来重复任务 1.简单循环 ...

  8. 问题解决: PythonStudy 环境搭建

    环境搭建的时候遇到问题 参见帖子: http://www.xitongcheng.com/jiaocheng/dnrj_article_24923.html 虚拟机运行的时候会遇到 最近有用户发现在电 ...

  9. 【无人机航空摄影测量精品教程】目录:摄影测量、Pix4d、EPS、CC、PhotoScan项目化作业流程及注意事项汇总

    目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 该专栏为目前最为热门的无人机航测内外业项目,主要内容包括:无人机航测外业作业流程(像控点布设.航线规划.仿地飞行.航拍)和内业数据 ...

  10. MongoDB(5)- Document 文档相关

    Documents MongoDB 的文档可以理解为关系型数据库(Mysql)的一行记录 MongoDB 将数据记录为 BSON 格式的文档 BSON 是 JSON 文档的二进制表示,但它支持的数据类 ...