[英]Spring Boot Properties Outside FAT JAR
我正在開發一個項目並且有一個用例,我需要為 Spring 從JAR外部啟動提供application.properties文件。
根據Baeldung的說法,獲取 application.properties 的優先順序是
前兩個的問題是我需要導航到包含配置的目錄才能運行 JAR。 在本地工作時聽起來沒有問題,但在通過 CI/CD 框架部署在遠程主機上時,這不是一個可行的解決方案。
我正在嘗試使用類路徑找到一種機制,並避免使用此處提到的 spring 引導的命令行選項或設置環境變量。
我無法弄清楚如何在運行 FAT JAR 時設置類路徑並一起指定配置。 如果可以的話,請幫我弄清楚!
提前致謝:)
編輯:我知道有一些方法可以使用 Spring Boot 的命令行選項來實現這一點,例如 spring.config 或 loader.path 等。
我試圖找到一個基於類路徑和目錄結構的更隱含的解決方案,只是為了減少它與正在使用 Spring 引導這一事實的耦合。
根據Spring 文檔,您可以使用spring.config.location
屬性定義外部配置位置。 進一步來說:
如果
spring.config.location
包含目錄(而不是文件),它們應該以 / 結尾(並且,在運行時,在加載之前附加從spring.config.name
生成的名稱,包括特定於配置文件的文件名)。spring.config.location
中指定的文件按原樣使用,不支持特定於配置文件的變體,並被任何特定於配置文件的屬性覆蓋。配置位置以相反的順序搜索。 默認情況下,配置的位置是:
classpath:/,classpath:/config/,file:./,file:./config/.
生成的搜索順序如下:
file:./config/ file:./ classpath:/config/ classpath:/
當使用
spring.config.location
配置自定義配置位置時,它們會替換默認位置。 例如,如果spring.config.location
配置為
classpath:/custom-config/,file:./custom-config/
搜索順序變成如下:
file:./custom-config/ classpath:custom-config/
或者,當使用
spring.config.additional-location
配置自定義配置位置時,除了默認位置之外,還會使用它們。 在默認位置之前搜索其他位置。 例如,如果配置了classpath:/custom-config/,file:./custom-config/
的附加位置,則搜索順序如下:
file:./custom-config/ classpath:custom-config/ file:./config/ file:./ classpath:/config/ classpath:/
包含您的外部配置的目錄的示例用法如下所示:
java -jar myproject.jar --spring.config.location=file:/custom-config-dir/
或者直接到外部配置文件:
java -jar myproject.jar --spring.config.location=file:/custom-config-dir/custom-config.properties
將自定義配置位置指定為 VM 參數是另一種選擇。
java -Dspring.config.location=<config-dir-path> -jar demo.jar
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.