源码基于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. 小技巧!CSS 提取图片主题色功能探索

    本文将介绍一种利用 CSS 获取图片主题色的小技巧.一起看看~ 背景 起因是微信技术群里有个同学发问,有什么方法能够获取图片的主色呢?有一张图片,获取他的主色调: 利用获取到的这个颜色值,来实现类似这 ...

  2. Python JWT 介绍

    Python JWT 介绍 目录 Python JWT 介绍 1. JWT 介绍 2. JWT 创建 token 2.1 JWT 生成原理 2.2 JWT 校验 token 原理 3. 代码实现 4. ...

  3. c#操作可道云api帮助类

    代码: public class KodCloudHelper { static readonly string kodCloudUrl = Configs.GetString("KodCl ...

  4. Django(17)orm查询操作

    前言 查找是数据库操作中一个非常重要的技术.查询一般就是使用filter.exclude以及get三个方法来实现.我们可以在调用这些方法的时候传递不同的参数来实现查询需求.在ORM层面,这些查询条件都 ...

  5. Windows 程序自动更新方案: Squirrel.Windows

    Windows 程序自动更新方案: Squirrel.Windows 1. Squirrel Squirrel 是一组工具和适用于.Net的库,用于管理 Desktop Windows 应用程序的安装 ...

  6. 编译课设·CLion到VS踩坑·解决·备忘录

    应试用,VS使用习惯和JB系差别还是蛮大的 打不过他们就加入他们 键位修改 工具-选项 键盘:改keymap 字体和颜色:宋体必改. 自动恢复:自动保存默认3分钟 CMake:自救时可以看一下 键位名 ...

  7. 30.Stream流

    5.Stream流 5.1体验Stream流[理解] 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集 ...

  8. Linux(深度)系统安装富士施乐(网络)打印机

    一般来讲,linux系统识别打印机没有问题,重点难点在于后面设置.此文特别感谢:河北石龙的陈一繁销售代表.P288dw施乐官网并未提供Linux的驱动并在安装过程中遇到很多问题,其不厌其烦的为我联系厂 ...

  9. [c++] 开发问题

    语言中的很多细节都是为了应对实际开发中会遇到的问题 当编写程序时,我们使用的定义多数不是自己写的,如sqrt(),是很多年前别人写的,我们只是使用它们 在C++中,对于"别处"定义 ...

  10. 《我常用的股票投资工具与网站》v2.0

    <我常用的股票投资工具与网站>v2.0 王大海 职业投资,抽空做一点分享. 661 人赞同了该文章 "少年你好,想不到你竟有如此因缘际会看到这里.我看你骨骼精奇,定是万中无一的交 ...