在咱们日常开发中,对于一些信息的配置加载一般都不会在代码中写死,而是通过一些配置动态加载。对于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-servercloud:config:server:git:uri: /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@EnableConfigServerpublic 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": "/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-gitserver:port: 13000bootstrap.ymlpring:cloud:config:uri: http://localhost:12000 # 配置中心的具体地址,即 config-servername: 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就行了
@SpringBootApplicationpublic class SpringCloudConfigClientApplication {public static void main(String[] args) {SpringApplication.run(SpringCloudConfigClientApplication.class, args);}}
在 Controller 中使用@Value注解来获取 Server 端参数的值
@RestControllerpublic 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 端获取到了参数。到此一个完整的服务端提供配置服务,客户端获取配置参数的例子就完成了。
是不是很简单呢,其实很多东西都是这样。在我们还不了解他的时候他对我们是陌生的,当我们真的开始了解他的时候,他对我们来说其实就是那么简单。当然对于我们程序员来说,代码 看了千百遍不如敲十遍。只有多动手才是快速学习的最佳捷径。