Как запретить Spring Boot разбирать ключи YAML с точками

У меня есть файл конфигурации YAML с картой свойств:

properties:
  a.b.c: 1

Boot проанализирует это как:

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

Однако я хочу:

{'a.b.c': 1}

Есть ли способ заставить его перейти в ключевой режим? Цитирование ключа, похоже, не помогает.


Обновлять

Фактический пример ниже.

Ява

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}}})


person btiernay    schedule 28.04.2014    source источник
comment
Я не уверен, где вы видите {a:{b:{c:1}}}. Обычное использование YAML в Spring Boot сводит его к Properties, поэтому он будет только на один уровень. Вы можете показать код?   -  person Dave Syer    schedule 29.04.2014
comment
@DaveSyer обновлен, чтобы добавить фактический пример кода   -  person btiernay    schedule 29.04.2014
comment
Я понимаю. Это потому, что вы привязываетесь к очень общему объекту, поэтому Spring Boot считает, что ваши разделители периодов являются разыменованием ключей карты. Что произойдет, если привязать к Map<String,String> или Properties?   -  person Dave Syer    schedule 29.04.2014
comment
@DaveSyer Кажется, работает с Map<String, Object>, но не с Properties. Спасибо за указатель!   -  person btiernay    schedule 29.04.2014
comment
Я вижу ту же проблему, но у меня уже есть Map ‹String, Object›, но проблема не устранена.   -  person Robin    schedule 29.10.2015


Ответы (2)


Я понимаю. Это потому, что вы привязываетесь к очень общему объекту, поэтому Spring Boot считает, что ваши разделители периодов являются разыменованием ключей карты. Что произойдет, если вы сделаете привязку к карте или свойствам?

person Dave Syer    schedule 29.04.2014

вы можете использовать, как показано ниже

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

ссылка - ссылка

person Chamly Idunil    schedule 06.05.2021