Spring Boot 应用程序可以同时使用 bootstrap.yml 和 application.yml 这两种配置文件,但它们各自服务于不同的目的和加载阶段。选择使用哪一个或是否同时使用取决于您的具体需求和项目架构。以下是关于两者的主要区别和使用场景:
bootstrap.yml
主要用途:
- 早加载(Early Loading) :
bootstrap.yml在应用程序启动的最早阶段就被加载,即在ApplicationContext初始化之前。这意味着它用于配置那些影响 Spring Boot 应用程序启动行为及外部化配置源本身的信息。 - Spring Cloud Config Client:当使用 Spring Cloud Config Server 进行集中化配置管理时,
bootstrap.yml通常用于配置客户端连接到 Config Server 所需的参数,如spring.application.name(应用标识)和spring.cloud.config.uri(Config Server 地址)。这样,应用程序在启动时就能从 Config Server 获取远程配置。 - 加密/解密:
bootstrap.yml有时用于存放加密/解密相关的配置,如凭据、密钥等,这些信息可能用于安全地访问外部配置源。
何时使用:
- 如果您的应用依赖 Spring Cloud Config Server 来获取动态、版本化的配置,那么必须使用
bootstrap.yml来配置客户端连接参数。 - 当需要在应用启动前配置某些系统级属性,如特定的初始化行为、外部配置源的访问凭证等,应使用
bootstrap.yml。
application.yml
主要用途:
- 常规应用配置:
application.yml是 Spring Boot 应用程序的主配置文件,用于定义应用的核心配置项,如数据源、服务器端口、日志级别、缓存设置、Spring MVC 配置、Bean 定义等。 - 自动配置:Spring Boot 的自动配置特性会读取
application.yml中的属性来决定如何配置各种组件和服务。 - 环境变量覆盖:
application.yml中的配置可以通过环境变量或命令行参数进行覆盖,以适应不同部署环境。
何时使用:
- 对于大多数 Spring Boot 应用程序,都需要使用
application.yml或其.properties格式对应文件来定义应用运行时所需的各种配置。 - 当不需要使用 Spring Cloud Config Server,或者远程配置仅用于部分非关键配置时,所有的应用配置都应放在
application.yml中。
总结
- 使用
bootstrap.yml:当您的 Spring Boot 应用集成 Spring Cloud Config Server 进行集中化配置管理,或者需要在应用启动初期配置一些影响外部化配置源访问的关键信息时。 - 使用
application.yml:对于大部分常规的 Spring Boot 应用配置,包括数据源、服务器端口、日志级别、缓存策略等,应使用application.yml。 - 同时使用:在使用 Spring Cloud Config Server 的场景下,通常会同时使用
bootstrap.yml来配置客户端与 Config Server 的连接,以及application.yml来存放本地的默认配置或那些不希望通过 Config Server 管理的配置项。
请注意,尽管 bootstrap.yml 优先加载,但其配置仍可以被 application.yml 中的同名属性覆盖,除非在特定情况下(如涉及加密/解密的属性)被设计为不可覆盖。在实际项目中,应根据具体需求和架构选择合适的配置文件来组织和管理应用配置。
非Spring Cloud下使用 bootstrap.yml 会出现加载不到配置的情况,如yml更改端口无效,redis读取配置为localhost:6379(默认配置)的情况。