如何将外部 application.yml 加载到使用 Micronaut Picocli 开发的应用程序中?

How to load external application.yml into the app developed with Micronaut Picocli?

我在 cli-app 配置文件中有一个使用 micronaut 框架开发的应用程序。我的应用使用了Hibernate和GORM包,所以application.yml

里面有相关配置

在默认配置中,micronaut 从 src/main/resources 加载 application.yml。

如果我希望我的应用程序从如下参数加载 application.yml:

java -Dmicronaut.config=/etc/fooApp/application.yml -jar fooApp.jar

我该怎么办? 谢谢

您可以使用 micronaut.config.files 系统 属性 提供额外的配置文件。您可以使用 -D 或通过导出 MICRONAUT_CONFIG_FILES 环境变量来定义它。

具有 -D 系统 属性 选项的变体

java -Dmicronaut.config.files=/etc/fooApp/application.yml -jar fooApp.jar

具有内联环境变量的变体

MICRONAUT_CONFIG_FILES=/etc/fooApp/application.yml java -jar fooApp.jar

具有导出环境变量的变体

export MICRONAUT_CONFIG_FILES=/etc/fooApp/application.yml

java -jar fooApp.jar

当您使用此技术提供额外的配置文件时,/etc/fooApp/application.yml 中定义的所有值将优先于例如classpath:application.yml 文件。如果要控制特定顺序,则需要定义以逗号分隔的配置文件。例如,如果你想提供一个额外的配置文件,但你想优先于 classpath:application.yml 文件,那么你需要执行以下操作:

java -Dmicronaut.config.files=/etc/fooApp/application.yml,classpath:application.yml -jar fooApp.jar

更多信息:https://docs.micronaut.io/latest/guide/index.html#propertySource


⚠️ 注意: 如果您想将此 /etc/fooApp.application.yml 位置硬编码到您的 CLI 应用程序,您可以执行

System.setProperty("micronaut.config.files", "/etc/fooApp/application.yml");

在 CLI 应用程序的 main() 方法中 class。但是,如果文件不存在,您将得到 ConfigurationException,因此请记住,如果您决定采用这种方法,您可能需要进行一些额外的检查。我在 Whosebug-cli 应用程序 to store an access token 中做了类似的事情,稍后将其注入到声明性 HTTP 客户端。