如何理解 Spring Boot 配置加载顺序?
1 个回答
人总要要沉下心来过一段宁静而自省的日子来整理自己。子羽在 Spring Boot 中,配置加载顺序决定了应用程序在启动时如何解析和应用配置属性。Spring Boot 提供了多种方式来加载配置,包括 properties 文件、YAML 文件、系统环境变量、命令行参数等。理解这些加载顺序有助于更好地管理和覆盖配置。 **Spring Boot 配置加载顺序**: 1. **默认配置**: Spring Boot 提供了一些默认配置值,这些值在没有其他配置覆盖时生效。 2. **`application.properties` 和 `application.yml` 文件**: 这些文件通常位于 `src/main/resources` 目录中,并且是最常用的配置方式。Spring Boot 会按以下顺序加载它们: - `application.properties` 或 `application.yml` - `application-{profile}.properties` 或 `application-{profile}.yml`(特定环境配置文件,如 `application-dev.properties`) 加载顺序中,`application-{profile}.properties` 或 `application-{profile}.yml` 会覆盖 `application.properties` 或 `application.yml` 中的配置。 3. **外部配置文件**: 可以通过命令行参数或者环境变量指定外部配置文件的位置,覆盖应用内部的配置文件。例如: ```bash java -jar myapp.jar --spring.config.location=/path/to/external/application.properties ``` 4. **系统环境变量**: 系统环境变量可以直接用于配置属性,通常在云部署或容器化部署中使用。 5. **命令行参数**: 命令行参数具有最高优先级,启动应用时传递的参数可以覆盖所有其他配置。例如: ```bash java -jar myapp.jar --server.port=8081 ``` 6. **配置优先级顺序**: Spring Boot 配置的优先级顺序如下: 1. 命令行参数 2. `SPRING_APPLICATION_JSON`(嵌入在环境变量中的 JSON) 3. ServletConfig 初始化参数 4. ServletContext 初始化参数 5. JNDI 属性 6. Java 系统属性(`System.getProperties()`) 7. 操作系统环境变量 8. `RandomValuePropertySource`(对于 `random.*` 配置) 9. `application-{profile}.properties` 或 `application-{profile}.yml`(特定环境配置文件) 10. `application.properties` 或 `application.yml` 11. `@PropertySource` 注解的配置文件 12. 默认属性(通过 `SpringApplication.setDefaultProperties` 指定) **总结**: 理解 Spring Boot 的配置加载顺序有助于更好地管理应用的配置。在实际开发中,可以根据需要灵活选择和组合这些配置方式,确保应用程序能够在不同环境中正常运行。通过命令行参数和外部配置文件,可以方便地覆盖和调整配置,适应不同部署需求。发布于 2024-07-31 11:05 •IP属地 广东举报评论收藏
公众号进入网站体验更佳

