如何防止Spring Boot用句点解析YAML密钥



我有一个带有属性映射的YAML配置文件:

properties:
  a.b.c: 1

引导会将其解析为:

{a:{b:{c:1}}}

然而,我想要的是:

{'a.b.c': 1}

有没有办法说服它进入"通过"键模式?引用密钥似乎没有帮助。


更新

下面的实际示例。

Java

import static com.google.common.collect.Maps.newLinkedHashMap;
import java.util.Map;
import javax.annotation.PostConstruct;
import lombok.Data;
import lombok.val;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties("hadoop")
public class HadoopProperties {
   private Map<Object, Object> properties = newLinkedHashMap();
}

YAML

application.yml:

hadoop:
   properties:
      fs.defaultFS: hdfs://localhost:8020
      mapred.job.tracker: localhost:8021

结果

对结果对象调用toString()

HadoopProperties(属性={fs={defaultFS=hdfs://localhost:8020},mapred={job={tracker=localhost:8021}})

我明白了。这是因为您绑定到一个非常通用的对象,所以Spring Boot认为您的句点分隔符是映射键的取消引用。如果绑定到Map或Properties会发生什么?

您可以使用如下

hadoop:
   properties:
      "[fs.defaultFS]" : hdfs://localhost:8020
      "[mapred.job.tracker]": localhost:8021

参考链接

最新更新