You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Boot移除application.yml后bootstrap.yml无法加载问题咨询

问题分析与解决方案

核心原因

你的问题本质是**bootstrap.yml 仅在Spring Cloud上下文启用的情况下才会被Spring Boot加载**。当你移除 application.yml 后,因为缺少Spring Cloud相关依赖或者默认禁用了bootstrap上下文,Spring Boot根本不会读取 bootstrap.yml 文件,导致 @Value("${spring.application.name}") 无法解析占位符,抛出了IllegalArgumentException

而把配置移到 application.yml 后能正常运行,是因为 application.yml 是Spring Boot默认加载的配置文件,不需要额外依赖支持。


具体解决方案

1. 引入Spring Cloud Bootstrap Starter(推荐)

从Spring Boot 2.4.x版本开始,bootstrap上下文默认被禁用,需要手动引入spring-cloud-starter-bootstrap依赖来启用它。如果是Maven项目,在pom.xml中添加以下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

注意要保证Spring Cloud版本和Spring Boot版本兼容(比如Spring Boot 2.7.x对应Spring Cloud 2021.0.x,Spring Boot 3.x对应Spring Cloud 2022.0.x),版本不匹配也可能导致配置加载异常。

2. 启用Legacy配置处理(备选)

如果不想引入额外依赖,可以通过JVM参数或者环境变量强制启用旧的配置加载逻辑:

  • JVM参数:启动应用时添加 -Dspring.config.use-legacy-processing=true
  • 环境变量:设置 SPRING_CONFIG_USE_LEGACY_PROCESSING=true

这样Spring Boot会回到旧的加载逻辑,优先读取bootstrap.yml文件。


验证步骤

  1. 按照上述方案修改依赖或配置
  2. 恢复你的bootstrap.yml文件,移除application.yml
  3. 启动应用,访问/welcome接口,应该能正常返回配置的hey字符串
  4. 查看控制台输出,WelcomeService中的System.out.println(welcomeMessage)应该能打印出hey

内容的提问来源于stack exchange,提问作者Niladri Chanda

火山引擎 最新活动