Quarkus 不使用与配置文件相关的变量

Quarkus does not use profile-related variables

这两个链接:

指定如何在 Quarkus 应用程序中使用不同的配置文件。我在我的测试环境中尝试了这两种变体,但我基本上都失败了。

第一个变体(自定义配置文件)

我有主配置文件 src/main/resources/application.properties,其中包含所有主要配置变量,但每个配置变量都有一个 env 变量赋值。

我的测试配置变量也在 src/main/resources/application.properties 中。它们的名称与基本配置变量的名称相同,只是以 %test..

为前缀

当我没有设置与任何配置变量相关的任何环境变量时,mvn -Dquarkus.test.profile=test clean verify 将按预期工作 - 在测试期间使用前缀为 %test. 的配置变量的值。

但是,一旦我指定了任何用作某些配置 属性 值的环境变量,此配置 属性 的测试值就不再使用,而是来自多变的。这也打破了我的 CI/CD 管道中的预期行为。

第二个变体(配置文件感知文件)

我有一个主配置文件src/main/resources/application.properties,还有一个测试配置文件src/main/resources/application-test.properties。我有与第一个变体相同的变量场景。这意味着在主配置文件中我有 my.property=${MY_PROPERTY} 并且在测试配置文件配置中我有 my.property=dummyValue.

如果我没有设置环境变量 MY_PROPERTY,那么 dummyValue 值将在 运行 期间用于 my.property。但是当我设置 env 变量 MY_PROPERTY 时,dummyValue 在 运行 mvn -Dquarkus.test.profile=test clean verify 时被完全忽略。因此,这再次破坏了我的测试环境。

正如@JavierToja 在他的评论中提到的那样——环境变量的优先级高于属性。

因此出于测试目的,我没有通过 %test.my.property=myValue 之类的属性创建测试配置文件,也没有创建 application-test.properties 作为非测试配置文件中 env 变量的值得到首选,我不会以这种方式实现所需的行为。

最后,我通过实施 QuarkusTestProfile class [1] 解决了我的问题,在“主”配置文件 (application.properties) 中优先使用测试配置文件而不是环境变量。我重写了 getConfigOverrides 方法,它 returns 一个键值对映射,其中键是我要重写的 属性 名称,值是此 属性 我想更喜欢环境变量中的值。

[1] https://quarkus.io/guides/getting-started-testing#testing_different_profiles