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去关闭此功能。