我有一個 Spring Cloud Config Server v3.0.5,它提供來自 Git 存盤庫的配置屬性,如下所示:
|
|-- foo-service/
| |-- application.yml
|-- bar-service/
| |-- application.yml
|-- application-common.yml
|-- application-kafka.yml
|-- ...
如您所見,每個微服務都有一個子目錄,其中包含特定于應用程式的配置以及根目錄中我們可以通過組態檔(common、kafka 等)獲取的一些常用配置。
因此,例如,我們可以像這樣獲取特定于應用程式和/或特定于組態檔的配置屬性:
# Successfully returns application-specific properties
curl http://<CONFIG_SERVICE_URL>/foo-service-application.yml
# Successfully returns application-specific common kafka properties
curl http://<CONFIG_SERVICE_URL>/foo-service-application,common,kafka.yml
但是,在開發程序中,我們希望使用基于檔案的本地存盤庫,這樣我們就不需要提交每個配置更改并輕松地在本地進行測驗。
因此,在配置服務器中,我將活動組態檔設定為native并設定spring.cloud.config.server.native.search-locations為相同的存盤庫路徑。
但是當我嘗試獲取特定于應用程式的配置(即子目錄中的組態檔)時,它回傳空:
# This returns empty response:
curl http://<CONFIG_SERVICE_URL>/foo-service-application.yml
{}
# This returns only profile-specific configs but **omits** foo-service applcations configs:
curl http://<CONFIG_SERVICE_URL>/foo-service-application,common,kafka.yml
...
我在這里想念什么?為什么它也不能回傳特定于應用程式的屬性?我是否必須為配置服務器設定另一個配置?
任何幫助表示贊賞。謝謝。
uj5u.com熱心網友回復:
好的,我終于找到了!
顯然,我們需要在屬性中使用應用程式占位符spring.cloud.config.server.native.search-locations顯式指定子目錄, IMO在 docs 中模糊地描述了該屬性:
搜索位置可以包含 {application}、{profile} 和 {label} 的占位符。通過這種方式,您可以隔離路徑中的目錄并選擇對您有意義的策略(例如每個應用程式的子目錄或每個組態檔的子目錄)。
因此,就我而言,我必須將其定義search-locations為:
spring:
cloud:
config:
server:
native:
search-locations:
- /path/to/config/repo
- /path/to/config/repo/{application}
現在它可以正確地服務于特定于應用程式和特定于組態檔的配置屬性。
雖然這對我的情況來說已經足夠了,但我仍然不知道為什么基于檔案的方法和基于 git 的方法有如此大的不同(即,為什么我們應該在基于檔案的方法中顯式地為特定于應用程式的配置設定子目錄,而它可以自動提供服務他們在基于 git 的方法中?)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/415656.html
標籤:
上一篇:如何在沒有DockerDesktop的情況下在macos中使用testcontainer?
下一篇:一個位元組中的一個字母?C#
