Как написать конфигурацию списка объектов для расширения Quarkus

#configuration #quarkus

Вопрос:

Я пишу расширение Quarkus (внутреннее использование) и не могу понять, как правильно написать часть конфигурации.

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

 some:
  list-of-config:
    - prop1: value1
      prop2: value2
      prop3: value3
    - prop1: value4
      prop2: value5
      prop3: value6
 

Поэтому я подумал использовать @ConfigGroup и список<>, как в следующем примере:

 @ConfigRoot(name = "some", phase = ConfigPhase.BUILD_TIME)
public class MyConfig {

  @ConfigItem(defaultValue = "true")
  public boolean enabled;

  public List<MyGroup> listOfConfig;

  @ConfigGroup
  public static class MyGroup {

    @ConfigItem
    public String prop1;
    
    @ConfigItem
    public String prop2;

    @ConfigItem
    public String prop3;
  }
}
 

К сожалению, при запуске приложения я получаю следующее исключение:

 SRCFG00013: No Converter registered for class org....MyConfig$MyGroup
 

@ConfigGroup работает довольно хорошо, когда они загружаются как один объект, но не как список. Я предполагаю, что на самом деле это не связано с самой группой конфигурации, так как у меня также есть эта ошибка без использования группы конфигурации, но простых объектов.

Кто-нибудь уже пытался использовать список объектов в качестве конфигурации для расширения Quarkus ? В официальной документации нет примеров по этому поводу.

Ответ №1:

Согласно документации, любой тип, не указанный в списке или не принимающий строковый параметр в качестве конструктора/valueOf/of, не может использоваться со Списком или Дополнительными типами, за исключением Необязательных, которые также могут быть применены к объекту конфигурационной группы. К сожалению, необязательная группа конфигурация прослушивается, как упоминалось здесь

Так что, похоже, пользовательские объекты не поддерживаются, что отвечает на мой вопрос. Quarkus также работает над добавлением использования сопоставления конфигураций для расширений, что должно решить проблемы и добавить поддержку сложных типов в будущих версиях (в настоящее время 2.1.0 на момент написания этого вопроса).