Quarkus 不使用与配置文件相关的变量
Quarkus does not use profile-related variables
这两个链接:
- https://quarkus.io/guides/config-reference#custom-profiles 和
- https://quarkus.io/guides/config-reference#profile-aware-files
指定如何在 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
这两个链接:
- https://quarkus.io/guides/config-reference#custom-profiles 和
- https://quarkus.io/guides/config-reference#profile-aware-files
指定如何在 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