Как определить условное свойство с именем вспомогательного свойства переменной

#spring #spring-boot

Вопрос:

У меня есть класс свойств конфигурации, содержащий карту. Карта заполнена значениями из файла yml. структура выглядит следующим образом.

 config:
  variable_sub_key_a:
    key_a: 1234
    key_b: 1234
  variable_sub_key_b:
...
 

Класс конфигурации выглядит следующим образом:

 @Configuration
public class Configuration{
 private Map<String, KEY> config= new HashMap<>();
}
 

Я хотел бы, чтобы класс конфигурации инициализировался только весной, когда элемент конфигурации существует в файле yml. Моя проблема в том, что часть имени свойства может отличаться. Поэтому я не могу использовать @ConditionalOnProperty. Я пробовал это с различными контидиональными аннотациями, но не выяснил, как я мог определить условие, которое проверяет только то, что свойство начинается с конфигурации.* . Есть какие-нибудь намеки, как я могу это сделать?

Комментарии:

1. Разве это невозможно собрать, чтобы Map<String, Map<String, String>> ? Все равно вам нужно использовать @ConditionalOnProperty на config

2. я не думаю, что это помогло бы. Проблема в том, что я должен знать полный ключ, например «config.variable_sub_key_a.key_a». Я хотел бы определить класс конфигурации, который мог бы содержать общие имена свойств.

3. @sge посмотрите на интерфейс состояния. Реализуйте интерфейс условия, напишите свою логику. затем используйте @Conditional(значение=класс, реализующий интерфейс условия). docs.spring.io/spring-framework/docs/current/javadoc-api/org/…

4. @MuhammadDanishKhan спасибо, я уже пытался реализовать свое собственное условие. Там я не нашел способа получить список имен свойств, определенных в файле yml. я мог бы сам прочитать файл yml, но тогда мне также придется реализовать логику наследования логики.

5. Какую часть конфигурационного ключа можно изменить?