SpringBoot读取配置文件原理和加载顺序优先级

文摘   2025-01-27 08:10   天津  

 

首先,我们要明白SpringBoot读取配置文件的原理。

SpringBoot项目启动时,会扫描多个位置来加载配置文件,这些位置包括项目路径下的config目录、项目的根目录、类路径下的config目录以及类路径的根目录。

配置文件可以是application.properties、application.yml或application.yaml格式。

接下来,我们来谈谈配置文件的加载顺序和优先级。

SpringBoot会按照以下顺序加载配置文件,并且高优先级的配置会覆盖低优先级的配置:

  1. 1. 项目路径下的config目录(file:./config/),这是最高优先级。
  2. 2. 项目的根目录(file:./)。
  3. 3. 类路径下的config目录(classpath:/config/)。
  4. 4. 类路径的根目录(classpath:/),这是最常用的配置位置,也是最低优先级。

在同一种路径下,如果同时存在properties、yml和yaml三种格式的配置文件,它们的优先级顺序是properties > yml > yaml。

此外,SpringBoot还支持多种外部配置方式,它们的优先级从高到低如下:

  1. 1. 命令行参数:通过java -jar命令启动应用时,可以在命令后附加配置项来指定配置。
  2. 2. 来自java:comp/env的JNDI属性。
  3. 3. Java系统属性(System.getProperties())。
  4. 4. 操作系统环境变量。
  5. 5. RandomValuePropertySource配置的random.*属性值,用于生成随机值。
  6. 6. jar包外部的带profile的配置文件(如application-{profile}.properties或application-{profile}.yml)。
  7. 7. jar包内部的带profile的配置文件。
  8. 8. jar包外部的不带profile的配置文件(如application.properties或application.yml)。
  9. 9. jar包内部的不带profile的配置文件。
  10. 10. @Configuration注解类上的@PropertySource。
  11. 11. 通过SpringApplication.setDefaultProperties指定的默认属性。

举个例子,如果我们有一个SpringBoot项目,并且我们在不同位置放置了多个配置文件,内容如下:

  • • 项目路径下的config目录(file:./config/)中的application.yml:
server:
  port: 8081
  • • 项目的根目录(file:./)中的application.properties:
server.port=8082
  • • 类路径下的config目录(classpath:/config/)中的application.yml:
server:
  port: 8083
  • • 类路径的根目录(classpath:/)中的application.yml:
server.port: 8084

当我们启动SpringBoot项目时,它会按照上述优先级顺序加载配置文件。

在这个例子中,由于项目路径下的config目录(file:./config/)中的application.yml具有最高优先级,所以项目的启动端口会是8081。

最后,SpringBoot提供了多种方式来读取配置文件,包括使用@Value注解、Environment接口、@ConfigurationProperties注解、@PropertySource注解等。

这些方法各有优劣,可以根据项目的具体需求选择使用。

希望这个讲解能帮助你更好地理解SpringBoot读取配置文件的原理和加载顺序优先级。

 

日拱一卒。希望大家能够点赞收藏转发。你的支持,是我最大的动力!

  

你诺喜欢,请点个关注

夏壹分享
系统化技术讲解,每日精进,为后端技术人员打造的知识充电站!
 最新文章