![](/img/trans.png)
[英]Spring weird behavior for overriding variables in application.properties with environment variables
[英]Adding environment variables to Spring's application.properties
我想從application.properties
運行兩個 Amazon S3 的 SDK 信息,但不是將其放入文件中,而是想在運行時添加它們./mvnw spring-boot:run
。 我看到可以這樣做:
./mvnw spring-boot:run -Dspring-boot.run.arguments="--srp.storage.s3.access-key=FOOBARFOOBAR,--srp.storage.s3.secret-key=foobarfoobarfoobarfoobarfoobar"
我嘗試使用 arguments 周圍的引號運行上面的命令,並且它們之間有/沒有空格。 此外,我嘗試在屬性文件中保留空白值以及完全刪除它們。
# srp.storage.s3.access-key=
# srp.storage.s3.secret-key=
srp.storage.s3.access-key=
srp.storage.s3.secret-key=
我有一個用@ConfigurationProperties("srp.storage")
注釋的 class 。 這些嘗試的結果各不相同,從應用程序因 class 未找到屬性而無法啟動,到實際運行但沒有效果。 導致服務器無法啟動的命令變體未在application.properties
中指定任何屬性,並嘗試運行帶引號和不帶引號且不帶空格的命令。 它運行但未生效的場景是放置空格。
我知道使用內置的 JAR 文件運行它,但如果可能的話,我希望能夠像這樣運行它,以防止每次我更改某些內容時構建。
還嘗試指定占位符,如此處所示,但同樣沒有成功。 我什至可以使用./mvnw
做我想做的事嗎? 還是必須與 JAR 文件一起使用?
srp.storage.s3.access-key=${access-key}
srp.storage.s3.secret-key=${secret-key}
./mvnw spring-boot:run -Dspring-boot.run.arguments="--access-key=FOOBARFOOBAR,--secret-key=foobarfoobarfoobarfoobarfoobar"
使用環境變量解決。 這對我來說已經足夠了。 不用說,您可以為 Spring 的文件和變量中的屬性選擇任何您想要的名稱,只需記住,在 Linux 環境中,您必須將變量名稱設置為全部大寫字母並使用下划線。
在.bashrc
或.zshrc
或類似文件中,添加:
export AWS_S3_ACCESS_KEY=FOOBARFOOBAR
export AWS_S3_SECRET_KEY=foobarfoobarfoobarfoobarfoobar
如前所示,在application.properties
文件中,添加;
srp.storage.s3.access-key=${AWS_S3_ACCESS_KEY}
srp.storage.s3.secret-key=${AWS_S3_SECRET_KEY}
並正常啟動。 好多了。
如果您使用的是 gradle 並且有可用的bootRun
任務,那么您可以將任務配置為讀取在運行任務時傳遞的參數。
將以下內容添加到您的構建文件中。
bootRun {
if (project.hasProperty('params')) {
args project.params.split(",")
}
}
然后您可以運行以下命令。
.\gradlew.bat bootRun -Pparams=--demo.prop=commandlinearg
我有一個注釋如下的字段
@Value("${demo.prop}")
private String prop;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.