源码基于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

  1. k: v

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

  1. # 行内写法
  2. k: {k1:v1,k2:v2,k3:v3}
  3. # 或
  4. k:
  5. k1: v1
  6. k2: v2
  7. k3: v3

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

  1. # 行内写法
  2. k: [v1,v2,v3]
  3. # 或
  4. k:
  5. - v1
  6. - v2
  7. - v3

2.4 实例

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

  1. @Data
  2. @ConfigurationProperties(prefix = "my-person")
  3. @Component
  4. public class Person {
  5. private String userName;
  6. private Boolean boss;
  7. private Date birth;
  8. private Integer age;
  9. private Pet pet;
  10. private String[] interests;
  11. private List<String> animal;
  12. private Map<String, Object> score;
  13. private Set<Double> salarys;
  14. private Map<String, List<Pet>> allPets;
  15. }
  16. @Data
  17. public class Pet {
  18. private String name;
  19. private Double weight;
  20. }

在yaml文件中配置Person的属性

  1. my-person:
  2. user-name: CodeTiger
  3. boss: true
  4. birth: 1996/11/29
  5. # 可以使用random来生成各种不同类型的随机值
  6. age: ${random.int}
  7. pet:
  8. name: tomcat
  9. weight: 100
  10. interests: [basketball, football]
  11. animal:
  12. - jerry
  13. - tom
  14. score:
  15. english:
  16. first: 30
  17. second: 40
  18. third: 50
  19. math: [131,140,148]
  20. chinese: {first: 128, second: 136}
  21. salarys: [3999,4999.98,5999.99]
  22. allPets:
  23. sick:
  24. - {name: tom}
  25. - {name: jerry,weight: 47}
  26. 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包即可。

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-configuration-processor</artifactId>
  4. <optional>true</optional>
  5. </dependency>

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

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. <configuration>
  7. <excludes>
  8. <exclude>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-configuration-processor</artifactId>
  11. </exclude>
  12. </excludes>
  13. </configuration>
  14. </plugin>
  15. </plugins>
  16. </build>

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

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

  1. spring:
  2. profiles:
  3. # 使用开发环境的配置
  4. active: dev
  5. ---
  6. # 开发环境配置
  7. server:
  8. port: 8888
  9. spring:
  10. profiles: dev
  11. ---
  12. # 生产环境配置
  13. server:
  14. port: 8888
  15. spring:
  16. profiles: prod

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

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

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

  1. import org.springframework.boot.autoconfigure.SpringBootApplication;
  2. import org.springframework.boot.builder.SpringApplicationBuilder;
  3. @SpringBootApplication
  4. public class TestApplication {
  5. public static void main(String[] args) {
  6. SpringApplicationBuilder builder = new SpringApplicationBuilder(TestApplication.class);
  7. builder.application().setAdditionalProfiles("dev");
  8. builder.run(args);
  9. }
  10. }

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

  1. 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. Day002 编译型和解释型语言

    编译型和解释型语言 原文链接 编译型(Compile) 用编译型语言写的程序执行之前,需要一个专门的编译过程,针对特定的平台,使用专门的编译器,把高级语言翻译成机器语言,以后直接运行而不需要再编译了, ...

  2. Base64文件上传(Use C#)

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,它是一种基于64个可打印字符来表示二进制数据的方法. 使用base64进行文件上传的具体流程是:前台使用js将文件转换为base64格 ...

  3. DVWA--SQL Injection

    sql注入是危害比较大的一种漏洞,登录数据库可以进行文件上传,敏感信息获取等等. Low 先来看一下源码 <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { ...

  4. java基础——多维数组和稀疏数组

    多维数组 多维数组可以堪称数组的数组,比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个以为数组 而且数组 int a[][]= new int[2][3]; public class Arr ...

  5. 基于混合云模式的calico部署

    开始前准备 确定calico数据存储 Calico同时支持kubernetes api和etcd数据存储.官方给出的建议是在本地部署中使用K8S API,仅支持Kubernetes模式.而官方给出的e ...

  6. 【转载】基于Linux命令行KVM虚拟机的安装配置与基本使用

    基于Linux命令行KVM虚拟机的安装配置与基本使用 https://alex0227.github.io/2018/06/06/%E5%9F%BA%E4%BA%8ELinux%E5%91%BD%E4 ...

  7. Linux_交换分区SWAP

    一.交换分区SWAP 1️⃣:交换分区SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用. 2️⃣:交换分区一般指定虚拟内存的大小 ...

  8. Linux下Shell实现服务器IP监测

    实验室有一个服务器放在机房,装的是Ubuntu Server,IP为自动分配,因此一旦IP有变化就无法远程操作,必须去机房记录新的IP.学了几天Shell之后想,是不是可以定时检测其IP的变化,一旦有 ...

  9. C语言的指针数组与指针数组

    一.指针数组与指针数组 1,指针数组 顾名思义,即一个元素全部是指针的数组,其形式与普通数组相似,形式如 *a[N]. 在理解指针数组的使用方式前,我先来说下我个人对数组的理解. 比如一维整形数组(形 ...

  10. linux上传启动项目命令

    使用Xshell 或其他远程链接登录工具登录服务器后 1.切换用户到root: sudo -i 账户密码 注意:可直接将jar包放入root用户目录下,避免有可能因为服务器文件夹权限设置导致在指定文件 ...