Spring Boot也可以从以下位置加载配置,优先级从高到低,高优先级的配置覆盖低优先级的配置,所有配置会形成互补配置。
-
命令行参数
在启动项目的时候使用命令行参数的形式修改配置
格式:–配置项=值;
多个配置使用空格分开
举例:java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.servlet.context-path=/abc -
来自java:comp/env的NDI属性
-
java系统属性(System.getProperties())
-
操作系统环境变量
-
RandomValuePropertySource配置的random.*属性
6到9可以总结成两句:由jar包外向jar包内进行寻找;优先加载带profile, 再加载不带profile
-
jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
-
jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
-
jar包外部的application.properties或application.yml(不带spring.profile)配置文件
-
jar包内部的application.properties或application.yml(不带spring.profile)配置文件
举例:
将打包好的jar包放到C:\Desktop\hello;
在C:\Desktop\hello目录下新建配置文件:application.properties,配置内容:server.port=8088;
启动,java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar;
结果会以8088端口启动,验证了由jar包外向jar包内进行寻找 -
@Configuration注解类上的@PropertySource
-
通过SpringApplication.setDefaultProperties指定的默认属性
以上所有支持的配置,都来自官方文档,官方文档(章节:24. Externalized Configuration)为我们提供了更多的配置文件的配置方式。