SpringCloud config的使用


1. 简介

Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持,分为Config Server和Config Client两部分,是一个可以横向扩展,集中式的配置服务器, 默认使用Git存储配置。

  • 集中式管理
  • 自动更新配置

2. 服务端

Config Server:是一个集中式、可扩展的配置服务器,它可以集中管理应用程序各个环境下的配置,默认使用Git存储配置内容。

快速搭建服务端

创建maven工程config,在pom.xml文件中添加如下依赖:

<!-- Config 服务端配置模块 -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-config-server</artifactId>
</dependency>

创建application启动类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

在resources目录下创建bootstrap.yml或bootstrap.properties,并添加如下配置:

server.port=8001
spring.application.name=config-server
spring.cloud.config.server.git.search-paths={git.path:config-client}
spring.cloud.config.server.git.uri=https://xxx.gitlab.com/xxx-config.git
spring.cloud.config.server.git.username={git.username}
spring.cloud.config.server.git.password={git.password}
spring.cloud.config.server.git.basedir={git.basedir:config-repo}

配置规则解析

访问配置信息的URL与配置文件({application}-{profile}.properties{application}-{profile}.yml)的映射关系:

  • /{application}/{profile}/[{label}]
  • /{label}/{application}-{profile}.properties
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.yml

其中:

{label}对应Git上不同的分支,默认为master

基础架构

安全保护

在pom.xml文件中添加如下依赖:

<!-- 可实现对配置中心访问的安全保护 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>

在服务端配置:

security.user.name=mox
security.user.password=123456

加密解密

使用前提

下载Java Cryptography Extension(JCE)并替换${JAVA_HOME}/lib/security/目录下原文件
  • http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

相关API

  • /encrypt/status:查看加密功能状态
  • /key:查看密钥
  • /encrypt:对数据进行加密
  • /decrypt:对数据进行解密

配置密钥

在服务端配置文件中添加:

encrypt.key=mo

前缀{cipher}

高可用配置

传统模式

  • 负载均衡

服务模式

  • 注册到Eureka

3. 客户端

快速搭建客户端

创建maven工程config,在pom.xml文件中添加如下依赖:

<!-- 客户端配置 -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

创建application启动类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@EnableAutoConfiguration
@SpringBootApplication
public class ConfigClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class, args);
    }
}

在resources目录下创建bootstrap.yml或bootstrap.properties,并添加如下配置:

server.port=8002
spring.application.name=config-client
spring.cloud.config.profile=dev
spring.cloud.config.label=develop
spring.cloud.config.uri=http://localhost:8001

客户端获取远程配置

访问配置信息的URL与配置文件({application}-{profile}.properties{application}-{profile}.yml)的映射关系:

  • /{application}/{profile}/[{label}]
  • /{label}/{application}-{profile}.properties
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.yml

其中:

spring.application.name: 对应配置文件中{application}
spring.cloud.config.profile: 对应配置文件中{profile}
spring.cloud.config.label: 对应配置文件中{label}

动态刷新配置

创建maven工程config,在pom.xml文件中添加如下依赖:

<!-- 包含了[/refresh]端点的实现,该端点用于实现客户端应用配置信息的重新获取与刷新 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

在客户端执行:

curl http://localhost:8002/refresh -X POST

注意:

使用@Value注解的配置,需在class上添加注解@RefreshScope,否则配置无法动态生效

声明:微默网|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - SpringCloud config的使用


不以物喜,不以己悲! 不忘初心,方得始终!