Spring Boot 配置加载顺序
一、Spring Boot 配置文件的加载顺序
1)bootstrap.properties 或 bootstrap.yml (如果存在) application.properties 或 application.yml
注意:
yml 文件优先加载于 properties 文件,后加载的配置项会覆盖先加载的配置项,所以如果 yml 和 peoperties 文件有相同的配置项,那么最终的值会是 properties 配置文件的值。
在单机版项目中:
配置文件加载顺序:application.yml > application.properties
在微服务项目中:
配置文件加载顺序:boostrap.yml > bootstrap.properties > application.yml > application.properties
2)命令行参数
3)操作系统环境变量
4)从 RandomValuePropertySource 生成的 random.* 属性
5)由 @TestPropertySource 注解声明的属性
6)由 @SpringBootTest 注解并且 #properties 注解属性的测试属性
7)由 SpringBootApplication 注解的 exclude 属性排除的自动配置的类
8)由应用程序的 RandomValuePropertySource 生成的 random.* 属性
9)在 application.properties 或 application.yml 中使用 SpringApplication 的 setDefaultProperties 方法设置的属性
这个加载顺序是有意为此的,因为有些属性需要在后续加载的时候覆盖前面的同名属性。
外部配置文件的加载方式:
- 命令行参数:可以直接在启动命令后添加启动参数。
- spring.config.location:用于指定配置文件的新位置
二、在Spring Boot中,配置文件的加载顺序遵循以下步骤
- 自动加载:Spring Boot在启动时会扫描特定位置的配置文件。这些位置包括jar包内的classpath路径、当前项目的根目录以及桌面上的文件路径。Spring Boot会优先加载高优先级的配置文件,并在低优先级配置文件被加载时覆盖掉冲突的属性。
- 自定义配置文件:开发者可以通过spring.config.name属性指定自定义配置文件名。Spring Boot会按照以下顺序查找这些配置文件:application.和application-default.,并根据扩展名的优先级进行加载。扩展名包括:.properties、.xml、.yml、.yaml。
- 命令行参数:开发者可以在命令行中指定一些参数来覆盖默认的配置值。这些参数将优先于任何其他配置文件中的值生效。
- 环境变量:环境变量也可以用来覆盖配置文件中的属性值。这些变量在应用程序启动时自动加载,无需额外操作。
- 属性占位符:在配置文件中,可以使用${...}语法来引用其他属性的值。这种方式可以创建依赖关系,使得某些属性在其他属性被解析后才能确定其值。
- 自动配置类:Spring Boot提供了一系列的自动配置类,可以根据项目需求自动配置一些组件。开发者可以通过禁用特定的自动配置类或自定义自动配置类来覆盖默认设置。
- 条件注解:Spring Boot允许使用条件注解来控制特定组件的创建。例如,只有当某个属性存在或满足特定条件时,某个bean才会被创建。
- 外部化配置:Spring Boot支持将部分配置移动到外部属性文件中,以提高可维护性和复用性。这些外部属性文件可以包含在jar包内部、当前项目根目录或其他指定位置。
- 总结来说,Spring Boot的配置加载顺序遵循以下原则:优先从高优先级的源加载配置,并在低优先级源加载时覆盖冲突的属性;开发者可以通过自定义配置文件、命令行参数和环境变量来覆盖默认值;自动配置类和条件注解允许更灵活地控制组件的创建;而外部化配置则提高了应用程序的维护性和复用性。了解这个加载顺序有助于更好地管理和优化Spring Boot应用程序的配置。