如何在Quarkus中覆盖属性?

10
我想在Quarkus应用程序中覆盖我在配置文件中配置的属性。
我该如何实现?

System.setProperty()怎么样?这里有一个解决我的问题的例子:https://dev59.com/b1IH5IYBdhLWcg3wEIbI#61449847 - cs_pupil
这在 Quarkus 中很可能不起作用(取决于您何时执行它)。 - geoand
2个回答

13

Quarkus的属性通常在src/main/resources/application.properties中进行配置。

这适用于配置Quarkus行为的属性(例如它监听的http端口或连接到的数据库URL)以及特定于您的应用程序的属性(例如greeting.message属性)。

前者的重载性取决于所涉及的配置。例如,http属性(如quarkus.http.port)是可重载的。

后者始终可以在运行时重载。

在JVM模式下运行Quarkus应用程序时,例如可以执行:

java -Dgreeting.message=hi -jar example-runner.java

同样地,当运行经过GraalVM(特别是SubstrateVM系统)转换为本地二进制文件的Quarkus应用程序时,您可以执行以下操作:

./example-runner -Dgreeting.message=hi

可以在"Quarkus - Configuring Your Application"官方指南中找到更多信息


如果您有大量需要为不同环境配置的属性,将它们全部列在命令行上似乎效率低下。是否可以在运行时应用覆盖文件位置呢? - Sean
2
目前你无法这样做,但是有一个相关的问题:https://github.com/quarkusio/quarkus/issues/1218 - geoand
3
暂时有一个选择:如果你在当前工作目录中的config目录下放置一个application.properties文件,那么它将优先于项目中的配置。请注意,不要改变原来的意思。 - geoand
2
@csotiriou,有一些关于文档的问题,但我现在找不到了... 不过代码是最终的真相:P。https://github.com/quarkusio/quarkus/blob/master/core/runtime/src/main/java/io/quarkus/runtime/configuration/ApplicationPropertiesConfigSource.java#L70 - geoand
2
这是文档链接:https://quarkus.io/guides/config#overriding-properties-at-runtime - Tushar
显示剩余2条评论

0
另一种覆盖属性的方法是使用Quarkus Profiles。这样,您可以为每个环境(如果需要)创建单独的应用程序文件。对于特定环境的配置文件,请在所有属性之前包含配置文件名称。
基本应用程序文件:
quarkus:
    http:
        port: 9090

环境特定配置文件:

"%dev":
    quarkus:
        http:
            port: 8181

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接