17.SpringBoot学习笔记

外部配置加载顺序

Posted by Chen Xingxu on June 20, 2020

SpringBoot学习笔记(十七)–外部配置加载顺序

常用外部配置加载

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

  1. 命令行参数
  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 ) 配置文件
  8. jar 包外部的 application.properties 或 application.yml (不带 spring.profile ) 配置文件
  9. jar 包内部的 application.properties 或 application.yml (不带 spring.profile ) 配置文件
  10. @Configuration 注解类上的 @PropertySource
  11. 通过 SpringApplication.setDefaultProperties 指定的默认属性

所有支持的配置加载来源:

https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/reference/html/spring-boot-features.html#boot-features-external-config

重点掌握

1. 命令行参数

所有的配置都可以在命令行上指定

多个配置用空格分开: –配置项=值

java -jar springboot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.servlet.context-path=/abc

由 jar 包外向 jar 包内进行加载,优先加载带 profile

  1. jar 包外部的 application-{profile}.properties 或 application.yml (带 spring.profile ) 配置文件

  2. jar 包内部的 application-{profile}.properties 或 application.yml (带 spring.profile ) 配置文件

之后加载不带 profile

  1. jar 包外部的 application.properties 或 application.yml (不带 spring.profile ) 配置文件

  2. jar 包内部的 application.properties 或 application.yml (不带 spring.profile ) 配置文件

验证

命令行参数

java -jar springboot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.servlet.context-path=/abc

运行结果为

 Tomcat started on port(s): 8087 (http) with context path '/abc'

在浏览器中访问

http://localhost:8087/abc/hello

即可返回结果 hello

加载 jar 包外部配置文件

将 application.properties 与 springboot-02-config-02-0.0.1-SNAPSHOT.jar 放在同一路径下。

application.properties

server.port=8085

#配置项目的访问路径
server.servlet.context-path=/springboot

在命令行中执行

java -jar springboot-02-config-02-0.0.1-SNAPSHOT.jar

运行结果为

Tomcat started on port(s): 8085 (http) with context path '/springboot'

在浏览器中访问

http://localhost:8085/springboot/hello

即可返回结果 hello