概述
SpringBoot除了支持properties格式的配置文件,还支持另外两种格式的配置文件。三种配置文件格式分别如下:
- properties格式
- yml格式
- yaml格式
application.properties(properties格式)
server.port=80
application.yml(yml格式)
server: port: 81
application.yaml(yaml格式)
server: port: 82
yml和yaml文件格式就是一模一样的,只是文件后缀不同,所以可以合并成一种格式来看。
- yaml语法规则
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
- #号 表示注释
- 注意属性名冒号后面与数据之间有一个空格
- 字面值、对象数据格式、数组数据格式
同级目录application配置文件优先级
application.properties > application.yml > application.yaml
每个配置文件中的项都会生效,只不过如果多个配置文件中有相同类型的配置会优先级高的文件覆盖优先级的文件中的配置。如果配置项不同的话,所有的配置项都会生效。
application 以及bootstrap 优先级
bootstrap优先于application加载, 用于应用程序上下文的引导阶段。由spring cloud BootstrapApplicationListener在ApplicationEnvironmentPreparedEvent时进行加载。
可以将bootstrap配置理解为系统级别的参数配置,这些参数一般不会变更。
application配置可以理解为定义应用级别的参数,可以覆盖替换bootstrap的配置信息。
application的属性优先较高,加载时先加载bootstrap配置文件,再加载application配置文件
不同级目录配置文件优先级
加载1. classpath:/ -- 优先级4. The classpath root
加载2. classpath:/config/ -- 优先级3. A classpath /config package
加载3. file:./ -- 优先级2. The current directory
加载4. file:./config/ -- 优先级1. A /config subdirectory of the current directory.
外部配置加载顺序
SpringBoot也可以从以下位置加载配置:
优先级从高到低;
高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置。
1.命令行参数
所有的配置都可以在命令行上进行指定;多个配置用空格分开; --配置项=值
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar
--server.port=8087 --server.context-path=/abc
2.来自java:comp/env的JNDI属性
3.WDpUhJava系统属性(System.getProperties())
4.操作系统环境变量
5.RandomValuePropertySource配置的random.*属性值
6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
8.jar包外部的application.properties或application.yml(不带spring.profihttp://le)配置文件
9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件
由jar包外向jar包内进行寻找,优先加载带profile的,再加载不带profile的。
10.@Configuration注解类上的@PropertySource
11.通过SpringApplication.setDefaultProperties指定的默认属性