spring cloud config-配置中心

         在咱们日常开发中,对于一些信息的配置加载一般都不会在代码中写死,而是通过一些配置动态加载。对于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 端获取到了参数。到此一个完整的服务端提供配置服务,客户端获取配置参数的例子就完成了。

       是不是很简单呢,其实很多东西都是这样。在我们还不了解他的时候他对我们是陌生的,当我们真的开始了解他的时候,他对我们来说其实就是那么简单。当然对于我们程序员来说,代码 看了千百遍不如敲十遍。只有多动手才是快速学习的最佳捷径。

 

 

posted @ 2019-04-21 20:51  力扛九鼎  阅读(3604)  评论(0编辑  收藏  举报