Проблема переносимости при реализации MicroProfile Config в Thorntail - PullRequest
0 голосов
/ 18 июня 2019

Этот вопрос касается правильного способа считывания конфигурации в REST-сервисе переносимым способом, например, должен работать на Thorntail 2.4.0 и Wildfly 15 .

Это была оригинальная реализация, предложенная Thorntail

@Inject
    @org.wildfly.swarm.spi.runtime.annotations.ConfigurationValue("swarm.port.offset")
private Optional<String> portOffset;

Это не работало в WildFly 15, поэтому мы изменили этот код следующим образом:

@Inject
@ConfigProperty(name="swarm.port.offset")
private Optional<String> portOffset;

И предоставили системное свойствоустановлено, это работает хорошо.

Однако, возвращаясь в Thorntail, оно генерирует следующее исключение:

org.jboss.weld.exceptions.DeploymentException: WELD-001408: неудовлетворенные зависимостидля типа Необязательно с квалификаторами @ ConfigProperty
в точке внедрения [BackedAnnotatedField] @Inject @ConfigProperty private com.my-company.core.internal.util.ZookeeperRegistry.portOffset
в com.my-company.core.internal.util.ZookeeperRegistry.portOffset (ZookeeperRegistry.java:0) WELD-001475: Следующие bean-компоненты совпадают по типу, но ни один не имеет соответствующих квалификаторов: - Метод источника [Необязательно] с отборочным [@Any @ConfigurationValue] объявлено как [[UnbackedAnnotatedMethod] @ConfigurationValue @Dependent @Produces org.wildfly.swarm.container.runtime.cdi.ConfigurationValueProducer.produceOptionalConfigValue (InjectionPoint)]

Большое спасибо заранее.

1 Ответ

0 голосов
/ 19 июня 2019

Наконец, код выполняется в обеих средах с одним файлом pom.

Я подробно опишу ниже принятое решение.

  1. Используется @ConfigProperty, а не @ org.wildfly.swarm.spi.runtime.annotations.ConfigurationValue
  2. Использовать @Any @ConfigProperty, разрешено WELD-001475
  3. В терминах зависимостей maven я включил эту зависимость независимо от того, строим ли мы дляThorntail или для WildFLy

    <dependency>
        <groupId>org.eclipse.microprofile.config</groupId>
        <artifactId>microprofile-config-api</artifactId>
    </dependency>
    

Фактическая версия определяется с помощью dependencyManagement для микропрофиля Eclipse:

<dependencyManagement>
    <dependencies>
        <dependency>
           <groupId>org.eclipse.microprofile</groupId>
           <artifactId>microprofile</artifactId>
           <version>2.2</version>
           <type>pom</type>
           <scope>import</scope>
       </dependency>   
...
</dependencyManagement>
Профили Maven используются для импорта реализаций Thorntail, которые не являются «ядрами», например, microprofile-health, но в случае microprofile-config это необязательно.Для WildFly предусмотрена реализация org.wildfly.extension.microprofile.config.smallrye, поэтому библиотека не должна быть включена в war / ear.
...