如何使用 java-ee8、microProfile 4.0、Openliberty 21 和 Docker 设置特定于阶段的微配置文件

问题描述

我的应用程序在 docker 容器中使用 JavaEE8、Openliberty 21.0.0.5 和 Microprofile 4.0 时遇到问题。 我无法从图像的“外部”设置 mpConfig-2.0 引入的 mp.config.profile。 我的设置如下:

microprofile-config.properties
microprofile-config-dev.properties
microprofile-config-prod.properties

src/main/resources/meta-inf/

在 server.xml 中正确激活功能并在启动时正确安装。

<featureManager onError="WARN">
    <feature>microProfile-4.0</feature>
    <feature>javaee-8.0</feature>
</featureManager>

每个阶段我还有一个 server.env,它通过 docker run 的 --env-file 传递给我的容器。

我的第一种方法是在 mp.config.profile 中设置 server.env,因为它可以 在不同阶段运行图像时发生了变化。 例如mp.config.profile=devserver-dev.env 等等。 但是 microprofile-config-dev.properties 的值从未与此设置一起使用。

我能够正确激活配置文件的唯一方法是使用

<variable name="mp.config.profile" value="dev" />

server.xml 内。

然而,server.xml 在 docker 镜像中不是特定于阶段的,因此无法在不同阶段更改它。

有人建议这样做的正确方法是什么吗?

提前致谢

问候

解决方法

如果您想从 mp.config.profile 设置 server.env,您可能需要改为设置 MP_CONFIG_PROFILE

由于点在环境变量名称中无效,MP Config defines some mapping rules 从环境变量中查找配置时。它将检查请求的名称,将非字母数字字符转换为下划线,然后再次将所有字母转换为大写。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...