首先,我们要明白SpringBoot读取配置文件的原理。
SpringBoot项目启动时,会扫描多个位置来加载配置文件,这些位置包括项目路径下的config目录、项目的根目录、类路径下的config目录以及类路径的根目录。
配置文件可以是application.properties、application.yml或application.yaml格式。
接下来,我们来谈谈配置文件的加载顺序和优先级。
SpringBoot会按照以下顺序加载配置文件,并且高优先级的配置会覆盖低优先级的配置:
1. 项目路径下的config目录(file:./config/),这是最高优先级。 2. 项目的根目录(file:./)。 3. 类路径下的config目录(classpath:/config/)。 4. 类路径的根目录(classpath:/),这是最常用的配置位置,也是最低优先级。
在同一种路径下,如果同时存在properties、yml和yaml三种格式的配置文件,它们的优先级顺序是properties > yml > yaml。
此外,SpringBoot还支持多种外部配置方式,它们的优先级从高到低如下:
1. 命令行参数:通过java -jar命令启动应用时,可以在命令后附加配置项来指定配置。 2. 来自java:comp/env的JNDI属性。 3. Java系统属性(System.getProperties())。 4. 操作系统环境变量。 5. RandomValuePropertySource配置的random.*属性值,用于生成随机值。 6. jar包外部的带profile的配置文件(如application-{profile}.properties或application-{profile}.yml)。 7. jar包内部的带profile的配置文件。 8. jar包外部的不带profile的配置文件(如application.properties或application.yml)。 9. jar包内部的不带profile的配置文件。 10. @Configuration注解类上的@PropertySource。 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读取配置文件的原理和加载顺序优先级。
你诺喜欢,请点个关注哦