使用 Maven 将环境变量传递给 Spring Boot 应用程序

naz*_*art 2 yaml environment-variables maven spring-boot

我正在使用 Spring Boot 3.2.1

我不想将敏感数据作为application.yml. 所以他们指的是环境变量。

在应用程序的 IntelliJ 配置设置(在Environment variables部分)中执行工作正常。

但是,从控制台执行 Maven 失败:

./mvnw -Ddemo-api-key=all56 -Ddemo-host=https://demo.api spring-boot:run
Run Code Online (Sandbox Code Playgroud)

以下是异常详情:

java.lang.IllegalArgumentException: Not enough variable values available to expand 'demo-host'
        at org.springframework.web.util.UriComponents$VarArgsTemplateVariables.getValue(UriComponents.java:367) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
        at org.springframework.web.util.UriComponents.expandUriComponent(UriComponents.java:262) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
        at org.springframework.web.util.HierarchicalUriComponents$PathSegmentComponent.expand(HierarchicalUriComponents.java:960) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
        at org.springframework.web.util.HierarchicalUriComponents.expandInternal(HierarchicalUriComponents.java:434) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
        at org.springframework.web.util.HierarchicalUriComponents.expandInternal(HierarchicalUriComponents.java:52) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
        at org.springframework.web.util.UriComponents.expand(UriComponents.java:172) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
Run Code Online (Sandbox Code Playgroud)

这是来自的片段application.yml

car-parks-url: ${demo-host}/cap-ws/getCarParks?apiKey=${demo-api-key}
Run Code Online (Sandbox Code Playgroud)

如果我将它放在更高的位置,application.yml它可以正常工作:

demo-api-key: all56
demo-host: https://demo.api
Run Code Online (Sandbox Code Playgroud)

URL 格式正确,所有数据都被正确提取。

无法理解将它作为环境变量传递给 maven 会错过什么?

小智 5

它不同于:

java -jar -Ddemo-api-key=all56 -Ddemo-host=https://demo.api myApp.jar
Run Code Online (Sandbox Code Playgroud)

将 env vars直接传递给应用程序的地方

如果你这样做:

./mvnw -Ddemo-api-key=all56 \
-Ddemo-host=https://demo.api spring-boot:run
Run Code Online (Sandbox Code Playgroud)

您将 vars 传递给maven 任务而不是应用程序

你可以使用:

 ./mvnw  spring-boot:run \
 -Dspring-boot.run.arguments="--demo-host=https://demo.api --demo-api-key=all56"
Run Code Online (Sandbox Code Playgroud)

或者

 ./mvnw  spring-boot:run -Dspring-boot.run.jvmArguments="\
 -Ddemo-host=https://demo.api -Ddemo-api-key=all56"
Run Code Online (Sandbox Code Playgroud)

这些命令指示您将这些变量传递给 Spring Boot 应用程序的内容。

附加资源: