当前位置: 首页 > 知识库问答 >
问题:

Thorntail中微文件配置实现的可移植性问题

邓宜年
2023-03-14

这个问题是关于以可移植的方式读取REST服务中的配置的正确方法,例如应该运行在Thornail 2.4.0和Wildfly 15上。

这是索恩泰尔建议的原始实现

@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.部署异常:WELD-001408:类型的未满足的依赖项可选的限定符@ConfigProperty
在注入点[BackedAnNotatedField]@Inject@ConfigProperty私有com.my-company.core.internal.util.ZookeeperRegistry.port偏移
在com.my-company.core.internal.util.ZookeeperRegistry.port偏移(ZookeeperRegistry.java: 0)WELD-001475:以下bean按类型匹配,但没有一个具有匹配的限定符:-生产者方法[可选]与限定符[@any@ConfigurationValue]声明为[[UnbackedAnNotatedAct]@ConfigurationValue@依赖@生成org.wildfly.swarm.container.runtime.cdi.ConfigurationValueProducer.produceOptionalConfigValue(InjsetPoint)]

非常感谢。

共有1个答案

卓瀚
2023-03-14

代码最终在两种环境中运行,只需一个pom文件。

我在下面详述所采取的解决办法。

>

  • 使用@ConfigProperty,而不是@org.wildfly.swarm.spi.runtime.annotations.ConfigurationValue
  • 使用@任何@配置属性,解决了WELD-001475
  • maven依赖方面,我包括了这个依赖,不管我们是为Thornail还是为WildFLy构建

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

    实际版本使用Eclipse微配置文件的依赖管理解决:

    <dependencyManagement>
        <dependencies>
            <dependency>
               <groupId>org.eclipse.microprofile</groupId>
               <artifactId>microprofile</artifactId>
               <version>2.2</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>   
    ...
    </dependencyManagement>
    

  •  类似资料:
    • 文件移植性 幸运的是,对于许多在不同操作系统下工作的用户,Subversion命令行程序的行为方式几乎完全一致,如果你知道在一个平台上如何运行svn,你也就学会了在其他平台上运行。 然而,这一点在本软件的其他几类地方或Subversion保持的实际文件并不一定都是正确的。例如,在一个Windows系统,“文本文件”的定义与Linux环境下的类似,但是也有区别—行结束的字符串并不相同。当然也有其他的

    • WebAssembly的二进制格式是被设计成可在不同操作系统与指令集上高效执行的,无论在Web或非Web环境中。 对高效执行的设想 尽管执行环境是有条件的,本地的,不确定的,也不要向WebAssembly提供下述特性。有些情况下为了WebAssembly模块执行,也许不得不模拟一些宿主硬件或操作系统不提供的特性,让它们似乎被支持。这种情况将会导致糟糕的性能。 随着WebAssembly的标准化推进

    • 2.2.1.可移植性 Linux可以轻松地移植到各种不同的硬件平台上。有了Linux做硬件抽象层,Android就不必为不同硬件的兼容性而劳心。Linux 的绝大多数底层代码都是用可移植的 C 代码编写,因此第三方开发者可以将 Android 移植到很多不同的设备上。

    • "C语言结合了汇编的强大功能和可移植性" -- 无名氏,暗指比尔.萨克。 可移植代码的好处是有目共睹的。这一节将阐述一些编写可移植代码的指导原则。这里"可移植的"是指一个源码文件能够在不同机器上被编译和执行,其 前提仅仅是在不同平台上可能包含不同的头文件,使用不同的编译器开关选项罢了。头文件包含的#define和typedef可能因机器而异。一般 来说,一个新"机器"是指一种不同的硬件,一种不同的

    • 问题内容: 假设我主要是Linux用户,但是我正在Go中开发一个我希望成为跨平台的应用程序。我到处搜寻,但似乎找不到能满足以下条件的信息: 如果我在amd64 Ubuntu系统上使用二进制文件,那么它也可以在 其他任何人的 64位Ubuntu / Debian系统上运行吗? 我如何使用它来构建一个x86_64二进制文件,该二进制文件也将在32位Debianlikes上开箱即用? 如果必须使用Win

    • 我引用Herbert Schildt第3章数据类型、变量和数组: 基元类型表示单个值,而不是复杂的对象。虽然Java在其他方面是完全面向对象的,但基元类型不是。这种效率的原因。制作基元类型会使性能降低太多。 基元类型被定义为具有显式范围和数学行为。像C、C++这样的语言允许整数的大小根据执行环境的指令而变化。然而,Java不同。由于Java的可移植性要求,所有数据类型都有一个强定义的范围。例如,i