第 25 章 Eclipse MicroProfile

25.1. 使用 Eclipse MicroProfile 配置管理配置

重要

Eclipse Microprofile Config 仅作为技术预览提供。技术预览功能不包括在红帽生产服务级别协议(SLA)中,且其功能可能并不完善。因此,红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

如需有关技术预览功能支持范围的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。

25.1.1. 关于 MicroProfile Config SmallRye 子系统

配置数据可以动态变化,应用需要能够在不重新启动服务器的情况下访问最新的配置信息。Eclipse MicroProfile 配置提供了配置数据的可移植外部化。这使得应用和微服务可以配置为在多个环境中运行,无需修改或重新打包。Eclipse MicroProfile 配置功能在 JBoss EAP 中使用 SmallRye Config 组件实施,由 microprofile-config-smallrye 子系统提供。此子系统包含在默认的 JBoss EAP 7.3 配置中。

25.1.2. 受 MicroProfile Config SmallRye 子系统支持的 ConfigSources

MicroProfile 配置属性可以是不同格式的,可以来自不同位置,由 ConfigSources 提供,它们是 org.eclipse.microprofile.config.spi.ConfigSource 接口的实施。

MicroProfile 配置规范提供下列默认 ConfigSource 实施,用于检索配置值:

  • 使用 System.getProperties().
  • 使用 System.getenv().
  • 来自类路径上的所有 META-INF/microprofile-config.properties 文件。

The microprofile-config-smallrye 子系统支持以下额外类型的 ConfigSource 资源,用于检索配置值:

注意

虽然以下部分使用管理 CLI 配置 microprofile-config-smallrye 子系统,但您也可以通过导航到 ConfigurationSubsystemsMicroProfile Config → 并点击 View 来使用管理控制台完成这些任务。

如需可用于配置 MicroProfile Config SmallRye 子系统的属性列表,请参阅 MicroProfile Config SmallRye 子系统。

从属性获取 ConfigSource 配置

您可以通过添加 config-source 属性并将属性指定为列表,直接存储 ConfigSource 的属性 以供访问。

以下管理 CLI 命令创建一个 ConfigSource,其中包含 property1 和 properties 2 属性 的配置数据。

/subsystem=microprofile-config-smallrye/config-source=props:add(properties={property1=value1,property2=value2})

此命令将为 microprofile-config-smallrye 子系统生成以下 XML 配置:

<subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0">
    <config-source name="props">
        <property name="property1" value="value1"/>
        <property name="property2" value="value2"/>
    </config-source>
</subsystem>
从目录获取 ConfigSource 配置

您可以通过添加 config-source 属性并指定包含文件的目录来创建 ConfigSource 以从目录中的文件读取属性。dir 目录中每个文件的名称是属性的名称,文件内容则是 属性的值,

以下管理 CLI 命令创建一个 ConfigSource,它将从 /etc/config/numbers-app/ 目录中的文件读取配置属性。

/subsystem=microprofile-config-smallrye/config-source=file-props:add(dir={path=/etc/config/numbers-app})

此命令将为 microprofile-config-smallrye 子系统生成以下 XML 配置:

<subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0">
    <config-source name="file-props">
        <dir path="/etc/config/numbers-app"/>
    </config-source>
</subsystem>

此结构与 OpenShift ConfigMap 使用的结构对应。The dir 值对应于 OpenShift 或 Kubernetes 中的 ConfigMap 定义中的 mountPath

JBoss EAP 中部署的任何应用能够以编程方式访问 目录中存储的属性。

假设目录 /etc/config/numbers-app/ 包含以下两个文件:

  • num.size :此文件包含值 5
  • num.max :此文件包含值 100

在下面的代码示例中,num.size 返回 5 and num.max 返回 100

@Inject
@ConfigProperty(name = "num.size")
int numSize;

@Inject
@ConfigProperty(name = "num.max")
int numMax;
从 ConfigSource 类获取 ConfigSource 配置

您可以创建和配置自定义 org.eclipse.microprofile.config.spi.ConfigSource 实施类,以提供配置值的来源。

以下管理 CLI 命令为名为 org.example.MyConfig Source 的实施类创建一个 Config Source,它由名为 org.example 的 JBoss 模块提供。

/subsystem=microprofile-config-smallrye/config-source=my-config-source:add(class={name=org.example.MyConfigSource, module=org.example})

此命令将为 microprofile-config-smallrye 子系统生成以下 XML 配置:

<subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0">
    <config-source name="my-config-source">
        <class name="org.example.MyConfigSource" module="org.example"/>
    </config-source>
</subsystem>

ConfigSource 类提供的属性可用于任何 JBoss EAP 部署。

有关如何将全局模块添加到 JBoss EAP 服务器的详情,请参考定义全局模块

从 ConfigSourceProvider 类获取 ConfigSource 配置

您可以创建和配置自定义 org.eclipse.microprofile.config.spi.ConfigSourceProvider 实施类,以注册多个 ConfigSource 实例的实施。

以下管理 CLI 命令为名为 org.example.MyConfigSourceProvider 的实施类创建一个 config-source-provider,该类由名为 org.example 的 JBoss 模块提供。

/subsystem=microprofile-config-smallrye/config-source-provider=my-config-source-provider:add(class={name=org.example.MyConfigSourceProvider, module=org.example})

此命令将为 microprofile-config-smallrye 子系统生成以下 XML 配置:

<subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0">
    <config-source-provider name="my-config-source-provider">
         <class name="org.example.MyConfigSourceProvider" module="org.example"/>
    </config-source-provider>
</subsystem>

ConfigSourceProvider 实施提供的属性可用于任何 JBoss EAP 部署。

有关如何将全局模块添加到 JBoss EAP 服务器的详情,请参考定义全局模块

25.1.3. 部署访问 ConfigSources 的应用程序

在 Java 代码中访问 MicroProfile 配置的应用必须启用 CDI,方法是在部署存档 中包含 META-INF/beans.xmlWEB-INF/beans.xml 文件,或者包含 CDI bean 注释。

有关 CDI 的更多信息,请参阅 JBoss EAP 开发指南中的上下文和依赖 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/development_guide/#contexts_and_dependency_injection 注入(CDI )。