需要注意的是,如果ConfigServer在ConfigClient之后启动,那远程配置将被加载到后,这点在使用中需要特别注意。 下图是可以看到远程配置被优先加载

  4.2 /env
  /env 是 spring-boot-starter-actuator提供的一个接口,GET方法调用可以查看系统环境变量,POST调用可以更改环境变量的值,并且通过这种方式修改的变量值具有高优先级。通过观察了解这个接口数据的变化,对学习SpringCloudConfig有帮助。
  curl -X POST http://localhost:8080/env -d spring.datasource.username=wsh
  如果要使上述修改生效,还需要利用/refresh重新载入所有@RefreshScope修饰的bean类。
  curl -X POST http://localhost:8080/refresh
  如果要重置这些修改
  curl -X POST http://localhost:8080/env/reset
  4.3 /refresh
  使@RefreshScope修饰的bean类在下次调用时重新载入配置。
  4.4 /bus/env
  作用同/env,区别是会对所有节点生效
  curl -X POST http://localhost:8888/bus/env -d spring.datasource.username=wsh
  4.5 /bus/refresh
  作用同/refresh,区别是会对所有节点生效
  向消息broker发送一条信息,所有监听这个broker的应用会获得上述消息,并各自开始更新配置。每个SpringCloudBus的节点都有这个接口,并且这些接口是等效的,调用任何一个都可以起到相同的效果。但通常我们会调用在ConfigServer上配置的Bus,这样从流程上更符合人们的理解习惯。
  curl -X POST http://localhost:8888/bus/refresh
  五. SpringCloudBus
  SpringCloudBus并不是一个独立的服务,他配置在每个ConfigClient,并通过消息队列使所有节点感知到状态变化。SpringCloudConfig没有直接集成bus的功能是有好处的,bus是可插拔设计并且目前并不完美,如果有个性需求完全可以用自己的方案替换bus,这个剥离bus成本几乎等于零。
  目前Bus有两种实现spring-cloud-starter-bus-amqp或spring-cloud-starter-bus-kafka,官网的例子是基于amqp,需要运行RabbitMQ,本文的例子用的是Kafka。
  现在我们已经有能力在无需重启的情况下对应用程序配置进行更新了。

  六. 项目代码
  SpringCloudConfig GitHub
  七. 问题
  当代码仓库访问速度慢的时候,读取配置的速度也会慢,要考虑代码仓库的可用性
  为了增强Config Server 的高可靠性,需要按比例增加Config Server的数量