SpringCloud Config 分布式配置中心
Spring Cloud Config 用于为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为Server和Client两部分。Server 用来连接配置仓库并为客户端提供获取配置信息,配置加密解密,定向推送等功能, Client来管理应用资源与业务相关的配置信息,在应用启动从配置中心获取和加载配置信息。
原理:
当 Client 启动时会向 Server 获取配置信息,Server 接收到请求会先从远程私有仓库拉取配置,并保存到本地仓库(Server如果再次启动,向远程私有仓库再次拉取配置信息,中途如果出现网络问题或者其它异常导致无法正常连接远程私有库,Server 才会从本地仓库拉取配置信息返回给 Client)。
Config Server
创建远程私有仓库
创建私有仓库(基于Github):
新建yaml文件:
文件内容:
info:
profile: dev
name: config-dev
describe: this is a development environment
两者文件不同之处于:一个dev、另一个prod
搭建config server
新建一个project(config-server) :
1.导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
2.启动类
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
3.配置yaml
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://github.com/lutng/springcloud-config-repo.git
force-pull: true # 强制拉取资源文件
# search-paths: dev,prod* 支持csv格式配置多个路径同时获取,还支持*作为通配符
# username:
# password:
server:
port: 60001
启动应用,访问:http://localhost:60001/springcloud-config-dev.yaml
访问规则格式:
#name 文件名称
#profiles 环境
#label 远程仓库分支(默认master拉取)
<IP:PORT>/{name}-{profiles}.yml
<IP:PORT>/{label}/{name}-{profiles}.yml
Config Client
新建一个project(config-client)
1.导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
2.启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
}
3.配置yaml
spring:
application:
name: config-client
cloud:
config:
uri: http://localhost:60001
profile: prod
label: master
server:
port: 60002
新建测试类:
@RestController
public class ConfigController {
@Value("${name}")
private String name;
@Value("${describe}")
private String describe;
@GetMapping("/configInfo")
public String getConfigInfo(){
return "ConfigInfo{" +
"name='" + name + '\'' +
", describe='" + describe + '\'' +
'}';
}
}
访问:
成功拉取springcloud-config-prod.yaml 配置信息.