Thorntail中MicroProfile Config实现的可移植性问题

时间:2019-06-18 16:46:44

标签: java java-ee wildfly thorntail microprofile

这个问题是关于以一种可移植的方式(例如,应该在 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:   对带有限定符的Optional类型的依赖关系不满意   @ConfigProperty
  在注入点[BackedAnnotatedField] @Inject   @ConfigProperty   私人com.my-company.core.internal.util.ZookeeperRegistry.portOffset
  在com.my-company.core.internal.util.ZookeeperRegistry.portOffset(ZookeeperRegistry.java:0)   WELD-001475:以下bean按类型匹配,但没有匹配的bean   限定词:     -带有限定符[@Any @ConfigurationValue]的Producer方法[Optional]声明为[[UnbackedAnnotatedMethod]   @ConfigurationValue @Dependent @产品   org.wildfly.swarm.container.runtime.cdi.ConfigurationValueProducer.produceOptionalConfigValue(InjectionPoint)]

非常感谢。

1 个答案:

答案 0 :(得分:0)

代码最终在两个环境中运行,并且只有一个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>
  1. Maven配置文件用于导入非“核心”的Thorntail实现,例如microprofile-health,但对于microprofile-config则没有必要。对于WildFly,提供了实现org.wildfly.extension.microprofile.config.smallrye,因此该库不应包含在战争中。