У меня есть базовая конфигурация YML для моего приложения в пути к классам, который выглядит следующим образом:
hello-world:
values:
bar:
name: bar-name
description: bar-description
foo:
name: foo-name
description: foo-description
hello-world содержит карту из строки в POJO, называемую значениями. Я хочу переопределить настройки в hello-world, в частности я хочу удалить запись. Итак, в локальном каталоге, где я запускаю приложение, у меня есть этот application.yml:
hello-world:
values:
bar:
name: bar-name
description: bar-description
source: from-the-local-dir
Но это не работает, потому что, когда моя локальная конфигурация переопределяет существующую, карты объединяются в одну, и исходная запись "foo" сохраняется. Есть ли способ явно удалить записи из карты конфигурации весной yml?
PS: я вижу, что локальный файл поднят, изменив запись "bar" в локальном файле. Вот полный код, я добавил конфигурацию «source», чтобы сказать, какой файл был загружен последним:
@Import(PlayGround.Config.class)
@SpringBootApplication
public class PlayGround {
@Autowired
Config config;
@Value("${source}")
String source;
public void start() {
System.out.println(config);
System.out.println(source);
}
public static void main(String[] args) {
System.out.println(Arrays.toString(args));
ConfigurableApplicationContext context = SpringApplication.run(PlayGround.class, args);
PlayGround playGround = context.getBean(PlayGround.class);
playGround.start();
}
@ConfigurationProperties(prefix = "hello-world")
public static final class Config {
Map<String, Information> values = new HashMap<String, Information>();
public Map<String, Information> getValues() {
return values;
}
public void setValues(Map<String, Information> values) {
this.values = values;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("values", values)
.toString();
}
}
public static final class Information {
String name;
String description;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("name", name)
.add("description", description)
.toString();
}
}
}