在咱们日常开发中,对于一些信息的配置加载一般都不会在代码中写死,而是通过一些配置动态加载。对于springcloud来说就是通过config来获取配置中心的配置信息来实现的。那么怎么实现一个配置中心?
一、配置中心地址
选择一个配置中心地址,我这里选的得是github,新建一个项目,简单配置即可。
咱们一般开发都分三个环境:开发、测试、和线上环境。新建三个文件将相应配置添加就可以了。
文件内容就随便了,比如我的:
二、服务端
有了配置地址后就该获取配置信息了。新建一个maven项目,作为config服务端,负责从配置地址读取相应配置(这里配置地址为自己的github),建好之后导入向管依赖。
需要的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
依赖添加完成后,创建一个启动类,启动类上需要添加一个注解: @EnableConfigServer
在resources文件里面,新建一个bootstrap.yml文件
bootstrap.yml填写配置信息
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://github.com/LISHENGDRUNK/config-repo-demo.git
#配置git仓库地址 search-paths: config-repo #git仓库地址下的相对地址,可以配置多个,用,分割。
server:
port: 12000
配置信息讲解:
Spring boot config也提供本地存储配置的方式,我们只需要设置属性spring.profiel.active=native,config server会默认从应用的src/main/resource目录下检索配置文件,也可以通过spring.cloud.config.server.native.searchLocations=file:E:/properties属性来指定配置文件的位置。虽然spring cloud config提供了这样的功能,但是为了支持更好的管理内容和版本控制,还是推荐使用github的方式。
启动类
启动类添加@EnableConfigServer,激活对配置中心的支持
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
到此 Server 端相关配置已经完成。
测试
首先我们先要测试 Server 端是否可以读取到 github 上面的配置信息,直接访问 http://localhost:12000/config-client/dev 返回信息如下:
{
"name": "config-client",
"profiles": ["dev"],
"label": null,
"version": "4e3ca4b9e2bb96c9a0ba012f6c6e0b6cadc48f3e",
"state": null,
"propertySources": [
{
"name": "https://github.com/LISHENGDRUNK/config-repo-demo.git
",
"source": {
"info.profile": "dev-update"
}
}
]
}
上述的返回的信息包含了配置文件的位置、版本、配置文件的名称以及配置文件中的具体内容,说明 Server 端已经成功获取了 Git 仓库的配置信息。
如果直接查看配置文件中的配置信息可访问 http://localhost:12000/config-client-dev.yml 返回:\
neo:
holle: dev-update
四、客户端
修改配置文件config-client-dev.yml中配置信息为:dev holle, 再次在浏览器访问 http://localhost:12000/config-client-dev.yml 返回:dev hello,说明 Server 端会自动读取最新提交的内容。
在完成了上述验证之后,确定配置服务中心已经正常运作,下面我们尝试如何在微服务应用中获取上述的配置信息。
再创建一个基础的 Spring Boot 应用,命名为 config-client。
添加依赖
在 pom.xml 中添加下述依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
需要配置两个配置文件,application.yml 和 bootstrap.yml,配置分别如下:配置文件
application.yml
spring:
application:
name: config-git
server:
port: 13000
bootstrap.yml
pring:
cloud:
config:
uri: http://localhost:12000 # 配置中心的具体地址,即 config-server
name: config-client # 对应 {application} 部分
profile: dev # 对应 {profile} 部分
label: master # 对应 {label} 部分,即 Git 的分支(默认是master)。如果配置中心使用的是本地存储,则该参数无用
特别注意:上面这些与 Spring Cloud Config 相关的属性必须配置在 bootstrap.yml 中,config 部分内容才能被正确加载。因为 config 的相关配置会先于 application.yml,而 bootstrap.yml 的加载也是先于 application.yml。
启动类
启动类不用修改,只用@SpringBootApplication就行了
@SpringBootApplication
public class SpringCloudConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudConfigClientApplication.class, args);
}
}
在 Controller 中使用@Value注解来获取 Server 端参数的值
@RestController
public class HelloController {
@Value("${neo.hello:error}")
private String profile;
@GetMapping("/info")
public Mono<String> hello() {
return Mono.justOrEmpty(profile);
}
}
测试
启动项目后访问 http://localhost:13000/info 返回dev说明已经正确的从 Server 端获取到了参数。到此一个完整的服务端提供配置服务,客户端获取配置参数的例子就完成了。
是不是很简单呢,其实很多东西都是这样。在我们还不了解他的时候他对我们是陌生的,当我们真的开始了解他的时候,他对我们来说其实就是那么简单。当然对于我们程序员来说,代码 看了千百遍不如敲十遍。只有多动手才是快速学习的最佳捷径。