配置中心 Spring Cloud Config 详解: 配置服务端
《配置中心 Spring Cloud Config 详解》系列文章更新,一起在技术的路上精进!本系列文章将会介绍Spring Cloud 中提供了分布式配置中心Spring Cloud Config。应用服务中除了实现系统功能的代码,还需要连接资源和其它应用,经常有很多需要在外部配置的数据去调整应用的行为,如切换不同的数据库,设置功能开关等。随着微服务的不断增加,需要系统具备可伸缩和可扩展性,除此之外就是管理相当多的服务实例的配置数据。在应用的开发阶段由各个服务自治,但是到了生产环境之后会给运维带来很大的麻烦,特别是微服务的规模比较大,配置的更新更为麻烦。为此,系统需要建立一个统一的配置管理中心。
前文回顾
在前面的文章,我们介绍了 Spring Cloud Config 的基本功能以及客户端实现的具体内容。本文将会介绍 Spring Cloud Config 服务端实现。
配置服务端
1. pom中的jars
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
</dependencies>
jar包主要引入了服务发现consul,将配置服务注册到consul上面,另外就是spring-cloud-config-server。
2. 入口类
服务端为外部配置(键值对或者与YAML相似的内容格式)提供了HTTP API接口。使用@EnableConfigServer
注解,基于Spring Boot的应用很容易内置使用。
@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(CloudApplication.class, args);
}
}
3. 启动类配置文件
server:
port: 8888
spring:
application:
name: config-server
cloud:
consul:
host: localhost
port: 8500
discovery:
ip-address: localhost
port: ${server.port}
instance-id: config-server-${server.port}
service-name: config-server
---
spring:
cloud:
config:
server:
git:
uri: https://gitee.com/keets/Config-Repo.git
searchPaths: ${APP_LOCATE:dev}
username: user
password: password
服务端的配置信息也是主要有服务发现和配置仓库的配置信息。spring.cloud.config.server.git.uri
对应配置git仓库地址;spring.cloud.config.server.git.searchPaths
对应配置仓库路径,这里我们指定了dev文件夹,区分了不同的部署环境;spring.cloud.config.server.git.username
对应访问git仓库的用户名;spring.cloud.config.server.git.password
对应访问git仓库的用户密码;如果是私有配置仓库的话,需要配置用户名和密码,也支持ssh的安全秘钥模式,否则不需要添加。上面的配置中使用了私有库,并且使用了用户名密码登录的模式。
验证服务端配置
配置服务端启动后,可以看到其拉取的git仓库中的配置信息。目前在git仓库只有config-client的配置,对应于config-client-dev.yml。
Located property source: CompositePropertySource [name='configService', propertySources=[MapPropertySource {name='configClient'}, MapPropertySource {name='https://gitee.com/keets/Config-Repo.git/dev/config-client-dev.yml#dev'}]]
2018-01-10 20:01:35.367 INFO 25897 --- [nio-8000-exec-1]
Spring Cloud Config服务端负责将git中存储的配置文件发布成REST接口,所以在建好配置仓库和配置服务器之后,已经可以验证服务端能否正常提供接口。我们根据上面端点的对应规则,请求http://localhost:8888/config-client/dev
,得到如下结果。
{
"name": "config-client",
"profiles": [
"dev"
],
"label": "master",
"version": "c5b6f3f78a0b3492a9ad01df212347839197e2e2",
"state": null,
"propertySources": [
{
"name": "https://gitee.com/keets/Config-Repo.git/dev/config-client-dev.yml#dev",
"source": {
"spring.profiles": "dev",
"cloud.version": "Camden SR7"
}
}
]
}
上面返回的结果显示了应用名、profile、git版本、配置文件的URL以及配置内容等信息。根据我们上面的讲解,配置内容还可以通过http://localhost:8888/config-client-dev.yml
端点获取。
配置验证
下面我们验证一下,客户端是否能够正常获取配置。这需要客户端增加API接口,并且提交客户端的配置文件到配置仓库中。
客户端增加API接口
在上面客户端的基础上,我们增加一个API端点接口,端点很简单,用来请求cloud.version的值。
@RestController
@RequestMapping("/cloud")
public class TestController {
@Value("${cloud.version}")
private String version;
@GetMapping("/version")
public String version() {
return version;
}
}
获取配置
启动配置服务端和客户端,可以使用POSTMAN或者浏览器等工具验证,客户端是否正确获取了配置信息。
从上图可以看出,config-client已经正常获取了配置信息。当我们提交了配置文件之后,最简单的方法就是重启服务以重新获取配置。客户端并不能主动感知到配置的变化,从而主动去获取新的配置。
小结
本文主要介绍了 Spring Cloud Config 示例的服务端实现,服务端提供客户端启动所必须的配置信息。当然,配置中心的功能远比这些功能要丰富,我们接下来将会看看 Spring Cloud Config 的一些高级用法。
- 点赞
- 收藏
- 关注作者
评论(0)