Spring Boot中YML配置文件属性名忽略连字符的问题咨询
这是预期行为,属于Spring Boot的宽松绑定特性
Spring Boot的属性处理机制支持宽松绑定(Relaxed Binding),它会自动将不同命名风格的属性视为等价,包括:
- 连字符分隔(比如
joke-url) - 驼峰式(比如
jokeUrl) - 下划线分隔(比如
joke_url) - 全大写加下划线(比如
JOKE_URL)
在你的场景里:
- 当配置
application.joke-url: url1时,Spring会将其归一化为内部属性键application.jokeurl,所以不管你用@Value("${application.jokeurl}")还是@Value("${application.joke-url}"),都会注入同一个值url1。 - 当你同时添加
application.jokeurl: url2时,这两个配置最终会映射到同一个内部键,而YAML配置中后出现的属性会覆盖前面的,所以最终注入的值是url2,看起来像是joke-url被忽略了,本质是同一属性键的覆盖。
如果需要区分这两个属性,你需要避免使用会被宽松绑定归一化的命名,比如使用不同的前缀或者完全不同的名称,而不是仅靠连字符有无来区分。
内容的提问来源于stack exchange,提问作者Sergey Tsypanov
相关产品推荐
相关产品推荐

