在属性名称中使用
-
时,我遇到了 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
,并再次将相同的字符串注入引用不同属性的值中。
所以我的问题是这是一个错误还是预期的行为?
使用驼峰式大小写。将
jokeurl
更改为 jokeUrl
以解决您的问题。
application.yml 或 application.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 进行测试。它正在工作。