这两个联系:
指定如何在Quarkus应用程序中使用不同的配置文件。我为我的测试环境尝试了这两个变体,基本上都失败了。
1变体(自定义配置文件)
我有主配置文件src/main/resources/application.properties
,它包含所有主配置变量,但每个变量都有一个赋值的env变量。
我的测试配置变量也在src/main/resources/application.properties
中。它们的名称与刚刚以%test.
作为前缀的基本配置变量相同。
当我没有任何与任何配置变量相关的环境变量集时,mvn -Dquarkus.test.profile=test clean verify
将按预期工作--在测试期间使用来自以%test.
为前缀的配置变量的值。
但是,一旦我指定了用作某个config属性的值的任何env变量,则不再使用此config属性的测试值,而是使用来自该变量的值。这也破坏了我的CI/CD管道中的预期行为。
第2变体(配置文件)
我有一个主配置文件src/main/resources/application.properties
,还有一个测试配置文件src/main/resources/application-test.properties
。对于变量,我有与第一个变量相同的场景。这意味着,例如,在主配置文件中,我有my.property=${MY_PROPERTY}
,而在测试配置文件中,我有my.property=dummyValue
。
如果我不设置env变量MY_PROPERTY
,那么dummyValue
值将用于运行时的my.property
。但是,当我设置env变量MY_PROPERTY
时,dummyValue
在运行mvn -Dquarkus.test.profile=test clean verify
时会被完全忽略。因此,这再次破坏了我的测试环境。
发布于 2021-10-05 17:41:48
正如@JavierToja在他的评论中所提到的,环境变量比属性具有更高的优先级。
因此,为了测试目的,我没有通过像%test.my.property=myValue
这样的属性创建测试概要文件,也没有通过创建application-test.properties
作为非测试配置文件中的env变量的首选值,并且我不会以这种方式实现期望的行为。
最后,我通过实现“主”配置文件(application.properties
)中的环境变量( QuarkusTestProfile
class 1 )解决了我更喜欢测试配置文件的问题。我以这样的方式重写了getConfigOverrides
方法,它返回一个键值对映射,其中键是我想要覆盖的属性名,而值是我希望使用的这个属性的值,而不是环境变量的值。
https://stackoverflow.com/questions/69441822
复制相似问题