Spring Boot 会忽略 YML 文件中属性名称中的破折号

问题描述 投票:0回答:1

在属性名称中使用

-
时,我遇到了 Spring Boot (3.1.3) 的奇怪行为。这是示例代码:

@SpringBootApplication
public class DemoApplication {
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}

@SpringBootTest
class DemoApplicationTests {
  @Value("${application.jokeurl}")
  private String jokeUrl;
  @Value("${application.joke-url}")
  private String jokeDashUrl;

  @Test
  void contextLoads() {
      System.out.println(jokeUrl);
      System.out.println(jokeDashUrl);
  }
}

这是我的

application.yml

application:
  joke-url: url1 #pay attention to dash in property name

当我运行测试时,它会在控制台中打印两行:

url1
url1

我们看到 Spring 将相同的字符串注入到实际上引用不同属性的值中,即

@Value("${application.jokeurl}")
@Value("${application.joke-url}")

现在,如果我在

application.yml
中再添加一个属性为

application:
  joke-url: url1 #pay attention to dash in property name
  jokeurl:  url2 #no dash in property name

相同的测试打印不同的行:

url2
url2

现在我们看到属性

application.joke-url
被忽略,取而代之的是
application.jokeurl
,并再次将相同的字符串注入引用不同属性的值中。

所以我的问题是这是一个错误还是预期的行为?

java spring spring-boot yaml
1个回答
0
投票

使用驼峰式大小写。将

jokeurl
更改为
jokeUrl
以解决您的问题。

application.ymlapplication.yaml:

application:
  joke-url: url1
  jokeUrl:  url2

更新了演示应用程序测试:

@SpringBootTest
class DemoApplicationTests {
  
  @Value("${application.jokeUrl}")
  private String jokeUrl;

  @Value("${application.joke-url}")
  private String jokeDashUrl;

  @Test
  void contextLoads() {
      System.out.println(jokeUrl);
      System.out.println(jokeDashUrl);
  }
}

输出:

url2
url1

使用 JDK 21 和 Spring Boot 3.1.4 进行测试。它正在工作。

© www.soinside.com 2019 - 2024. All rights reserved.