“dev”配置覆盖 Quarkus 中的“test”配置

Posted

技术标签:

【中文标题】“dev”配置覆盖 Quarkus 中的“test”配置【英文标题】:"dev" config overrides "test" config in Quarkus 【发布时间】:2020-08-26 20:08:56 【问题描述】:

在我的 Quarkus 应用程序中,我不希望 Git 对密码进行版本控制。

prod 配置文件没有任何问题,因为我在 $PWD/config/application.properties 中有一个配置文件。很好。

对于dev 配置文件,我使用.env 方法,其中包含以下属性:

QUARKUS_DATASOURCE_PASSWORD=foo

我正在尝试设置测试,我需要一些单独的 conf 用于测试。 所以我的src/test/resources/application.properties 中有以下配置:

%test.quarkus.datasource.password=bar

不幸的是,测试值 (bar) 被 .env 值 (foo) 覆盖,该值应该专用于 dev 配置文件。

我没有找到一种优雅的方法来解决它。

基于https://quarkus.io/guides/config#overriding-properties-at-runtime,我有5种可能的方法:

    “使用系统属性”:我希望有一个文件,这样每个开发人员都可以拥有自己的文件,而无需在启动前调整命令行; “使用环境变量”:同理; .env 文件:可以工作,但我不能仅指定 dev 配置文件的值(又名 %dev.[...]); $PWD/config/application.properties 文件:嗯,这是用于开发模式的,我觉得它不方便,因为目标已清除,我必须在每个 mvn clean 之后再次复制 config 文件夹; 创建我自己的ConfigSourceConfigSourceProvider。我知道这个可以工作,但我更愿意避免在我的项目中做特定的事情,并保留内置的 Quarkus 配置。

【问题讨论】:

【参考方案1】:

我刚刚发现我错了:

    .env 文件:可以工作,但我不能仅指定开发配置文件的值(又名 %dev.[...]);

.env 文件中可以有自定义配置文件值:

_DEV_QUARKUS_DATASOURCE_PASSWORD=foo

由于我可以在属性前加上 _DEV_[...],因此该值仅适用于 dev 配置文件:test 属性不再被覆盖。

【讨论】:

以上是关于“dev”配置覆盖 Quarkus 中的“test”配置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Quarkus 中覆盖一个单元测试的配置属性

yaml/symfony2:覆盖配置

如何调试在开发模式下运行的 Quarkus 应用程序?

quarkus数据库篇之二:无需数据库也能运行增删改查(dev模式)

quarkus数据库篇之二:无需数据库也能运行增删改查(dev模式)

RestAssured 不尊重 Quarkus 中的 ObjectMapper 配置