Spring Cloud配置中心

基于Spring Boot借助Spring Boot Actuator动态刷新配置。

使用Spring initializr快速创建Spring boot应用。

Maven依赖

org.springframework.cloud:spring-cloud-starter-config

创建git仓库

使用git仓库管理配置数据,可将Config Server指向在线git仓库,也可基于本地Git仓库。 

git init

创建一个目录使用git init初始化仓库。

新建配置文件并添加仓库:

a-bootiful-client.properties

确保使用git commit命令提交它。

配置

在应用配置文件中指定Git仓库的路径:

/src/main/resources/application.properties

spring.cloud.config.server.git.uri=${HOME}/Desktop/config

Annotaion:

@EnableConfigServer

启用配置:

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@EnableConfigServer
@SpringBootApplication
public class ConfigServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServiceApplication.class, args);
    }
}

客户端应用

在应用的引导文件(bootstrap.properties)中为应用程序命名,并指定配置服务器。

spring.application.name=a-bootiful-client

spring.cloud.config.uri=http://localhost:8888

动态刷新配置

开启refresh端点,动态读取配置:

/src/main/resources/application.properties

management.endpoints.web.exposure.include=*

默认,客户端启动时读取配置,为应用引入动态获取配置的能力。

Annotaion:

@RefreshScope

通过刷新事件,获取更新的值。

package hello;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class ConfigClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class, args);
    }
}

@RefreshScope
@RestController
class MessageRestController {

    @Value("${message:Hello default}")
    private String message;

    @RequestMapping("/message")
    String getMessage() {
        return this.message;
    }
}

填写配置

a-bootiful-client.properties

message = Hello world

然后提交:

git commit

说明:

Config Server根据客户端应用名匹配对应配置文件,如:a-bootiful-client.properties,

git仓库中的通用配置,如:application.properties、application.yml会分发给各个服务。

覆盖规则

命名具体的配置文件(如a-bootiful-client.properties)会覆盖application.properties或application.yml文件中的配置项。

测试配置

启动配置服务器和客户端应用后,在浏览器中访问客户端应用:

http://localhost:8080/message

响应内容:

"Hello world"

动态修改配置

a-bootiful-client.properties:

message = Hello Spring

然后提交:

git commit

访问:

http://localhost:8888/a-bootiful-client/default

Spring Boot Actuator

使用Spring Boot Actuator刷新端点,通知客户端应用读取配置。

Maven依赖

org.springframework.boot:spring-boot-starter-actuator

发出刷新请求:

http://localhost:8080/actuator/refresh

$ curl localhost:8080/actuator/refresh -d {} -H "Content-Type: application/json"

查看:

http://localhost:8080/message