#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. Какую часть конфигурационного ключа можно изменить?