gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:17:51 26 4
gpt4 key购买 nike

这个问题是关于以可移植的方式读取 REST 服务中的配置的正确方法,例如应在 Thorntail 2.4.0Wildfly 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: Unsatisfied dependencies for type Optional with qualifiers @ConfigProperty
at injection point [BackedAnnotatedField] @Inject @ConfigProperty private com.my-company.core.internal.util.ZookeeperRegistry.portOffset
at com.my-company.core.internal.util.ZookeeperRegistry.portOffset(ZookeeperRegistry.java:0) WELD-001475: The following beans match by type, but none have matching qualifiers: - Producer Method [Optional] with qualifiers [@Any @ConfigurationValue] declared as [[UnbackedAnnotatedMethod] @ConfigurationValue @Dependent @Produces org.wildfly.swarm.container.runtime.cdi.ConfigurationValueProducer.produceOptionalConfigValue(InjectionPoint)]

提前非常感谢。

最佳答案

代码最终在两个环境中运行,并使用一个 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>

实际版本是使用 Eclipse 微配置文件的 dependencyManagement 解析的:

<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 中。
  • 关于java - Thorntail 中 MicroProfile Config 实现的可移植性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56653696/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com