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,否则配置无法动态生效