一、占位符

作用:指定默认值、获取值、生成随机数等。

  1. person:
  2. name: 张三${random.value}
  3. age: ${random.int}
  4. idCard: ${random.long}
  5. uuid: ${random.uuid}
  6. keyOne: ${random.int(10)}
  7. keyTwo: ${random.int[1,100]}
  8. dog:
  9. name: ${person.name}家的旺财

二、多配置文件

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml的形式,其中application.yml 或application.properties默认为主配置文件。
实际开发过程中,我们也常使用多配置文件的形式分别指定开发,测试和生产环境。

三、激活指定配置文件

方法一
在配置文件中指定 spring.profiles.active=dev
方法二
命令行,可以直接在测试的时候,配置传入命令行参数。
java -jar spring-boot.jar --spring.profiles.active=dev
方法三
虚拟机参数-Dspring.profiles.active=dev

四、配置文件的加载位置

Spring Boot启动时会扫描以下位置的application.properties 或 application.yml文件作为Spring Boot的默认配置文件。

  1. file:./config/ ## 项目根路径的config目录下
  2. file:./ ## 项目的根路径下
  3. classpath:/config/ ## 资源文件根路径的config目录下
  4. classpath:/ ## 资源文件的根路径下

优先级由高到底,且四个位置的配置文件会全部加载互补配置高优先级的配置会覆盖低优先级的配置
我们还可以通过spring.config.location来改变默认的配置文件位置。项目打包好以后,我们可以使用命令行参数的形式,在启动项目的时候来指定配置文件的新位置;指定的配置文件和默认加载的这些配置文件共同起作用,形成互补配置。
java -jar spring-boot.jar --spring.config.location=/home/gmd/application.yml

五、外部配置加载顺序

SpringBoot也可以从以下位置加载配置,优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置

下列举例并不完全,详情见Spring官网

1、命令行参数

所有的配置都可以在命令行上进行指定 java -jar spring-boot.jar --server.port=8888 --server.context-path=/abc 多个配置用空格分开 —配置项=值

2、来自java:comp/env的JNDI属性
3、Java系统属性(System.getProperties())
4、操作系统环境变量
5、RandomValuePropertySource配置的random.*属性值
6、jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
7、jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件

6和7 由jar包外向jar包内进行寻找,优先加载带profile的(application-{profile}.yml)。 8和9 由jar包外向jar包内进行寻找,再来加载不带profile

8、jar包外部的application.properties或application.yml(不带spring.profile)配置文件
9、jar包内部的application.properties或application.yml(不带spring.profile)配置文件
10、@Configuration注解类上的@PropertySource
11、通过SpringApplication.setDefaultProperties指定的默认属性