Spring Cloud Config配置中心可以使用本地,git,svn以及數據庫方式實現配置存儲等等,也可以通過自己自定義其他外部配置來獲取配置數據,比如通過連接mogodb, 或者鏈接zookeeper, 來實現配置數據的獲取,只要定義類去實現EnvironmentRepository接口即可。
public class CustomEnvironmentRepository implements EnvironmentRepository {
@Override
public Environment findOne(String application, String profile, String label) {
Environment environment = new Environment(application, StringUtils.commaDelimitedListToStringArray(profile), label, null, null);
PropertySource propertySource = new PropertySource(name, sourceMap);
environment.add(propertySource);
return environment.add;
}
}
各個客戶端在連接註冊中心,獲取到配置中心實例後,會調用上面這段代碼邏輯從配置中心獲取到 Environment數據變量,上線環境後,遇到了一個問題,查看日誌,發現這塊邏輯被不停的調用,每20多秒就會調用一次,application的name爲 app,通過查看SpringCloudConfig的官方文檔知道Config Server 通過一個健康指示器來檢測配置的EnvironmentRepository是否正常工作。 默認情況下會向EnvironmentRepository詢問一個名字爲app的應用配置,EnvironmentRepository實例迴應default配置。 也就是說當健康監視器默認開啓的時候,會不停的調用findOne來檢測,配置是否可用,是否會出現異常,
這段代碼是org.springframework.cloud.config.server.config.ConfigServerHealthIndicator類裏初始化名稱爲application名字爲app的代碼
@PostConstruct
public void init() {
if (this.repositories.isEmpty()) {
this.repositories.put("app", new Repository());
}
}
如果想停止掉這樣的檢測可以通過配置spring.cloud.config.server.health.enabled=false去關閉此功能。