Spring Boot配置文件的加载位置及顺序是Spring
Boot应用启动过程中一个重要的环节,它决定了哪些配置文件会被加载以及它们的优先级。以下是对Spring
Boot配置文件加载位置和顺序的详细解析:
配置文件加载位置
Spring
Boot项目启动时,会扫描以下位置的application.properties或application.yml文件作为默认配置文件:
file:./config/: 项目路径(通常是src的同级目录)下的config目录。
file:./: 项目的根目录(src的同级目录)。
classpath:/config/: 类路径(通常是resources的同级目录)下的config目录。
classpath:/: 类路径的根目录(resources的同级目录)。
配置文件加载顺序
Spring Boot按照以下顺序加载配置文件,高优先级的配置会覆盖低优先级的配置:
-
file:./config/(最高优先级)
-
file:./
-
classpath:/config/
-
classpath:/(最低优先级)
配置文件类型
Spring Boot支持两种类型的配置文件:application.properties和application.yml(或application.yaml)。当同一个目录下同时存在这两种类型的配置文件时,application.properties会优先加载,但两种文件会进行互补配置。即,如果同一配置项在两个配置文件中都进行了设置,那么application.properties中的配置会覆盖application.yml中的配置。
外部配置加载顺序
除了上述默认的配置文件加载位置外,Spring Boot还支持多种外部配置方式,它们的优先级从高到低如下:
命令行参数:通过java -jar命令启动应用时,可以在命令后附加–配置项=值的形式来指定配置。
来自java:comp/env的JNDI属性。
Java系统属性(System.getProperties())。
操作系统环境变量。
RandomValuePropertySource配置的random.*属性值:用于生成随机值。
jar包外部的带profile的配置文件(如application-{profile}.properties或application-{profile}.yml)。
jar包内部的带profile的配置文件。
jar包外部的不带profile的配置文件(如application.properties或application.yml)。
jar包内部的不带profile的配置文件。
@Configuration注解类上的@PropertySource。
通过SpringApplication.setDefaultProperties指定的默认属性。
注意事项
可以通过spring.config.location属性来改变默认的配置文件位置。
在项目打包后,可以使用命令行参数的形式来指定配置文件的新位置,指定的配置文件和默认加载的配置文件会共同起作用,形成互补配置。
当使用多环境配置时(如开发、测试、生产环境),可以通过激活不同的profiles来加载对应的配置文件。
综上所述,Spring Boot配置文件的加载位置和顺序是灵活且可配置的,可以根据项目的具体需求进行调整。