【Config】01-Config与SpringCloud

Config与SpringCloud

简介

为什么要使用配置中心:

在微服务项目中,所写的项目有很多,需要写的配置文件也会很多。就会遇到如下问题:

  1. 如果重新修改配置文件,就需要对项目进行重新编译、打包、上传、重新启动…
  2. 如果多个服务配置了相同的数据库,而此时更换了数据库之后,我们需要修改这几个项目的配置文件
  3. 很多情况下、配置文件的配置信息是相同的,但我们需要给每个不同的项目都编写该配置

作用:

  1. 集中管理配置文件
  2. 不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
  3. 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉去培植自己的信息。
  4. 当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
  5. 将配置信息以REST接口的形式包暴露

使用

在github中创建配置项目

  1. 配置githubgitee。我这里使用gitee

    1. 新建项目repository

      img-01

    2. 新建目录及文件

      img-02

      img-03

    3. 添加配置信息

      img-04

config-server端配置

编码

  1. 项目结构

    …咋忘记截图了呢。。。一定是太认真忘记了

  2. pom.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    </dependencies>
  3. application.yml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    server:
    port: 7051
    spring:
    application:
    name: cloud-config
    cloud:
    config:
    server:
    git:
    uri: https://gitee.com/zsqbigbig/springcloud-config-gitee.git
    search-paths:
    - springcloud-config-gitee
    label: master
    # http://localhost:7051/master/springcloud-config-gitee-dev.yml
    eureka:
    client:
    service-url:
    defaultZone: http://localhost:7001/eureka
  4. ConfigMain7051.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /**
    * 1. 启动Spring Cloud Config: @EnableConfigServer
    */
    @EnableConfigServer
    @SpringBootApplication
    public class ConfigMain7051 {

    public static void main(String[] args) {
    SpringApplication.run(ConfigMain7051.class);
    }

    }

访问配置文件

规则 示例
/{label}/{application}-{profile}.yml http://localhost:7051/master/springcloud-config-gitee-dev.yml
/{application}-{profile}.yml http://localhost:7051/springcloud-config-gitee-dev.yml
/{application}-{profile}[/{label}].yml http://localhost:7051/springcloud-config-gitee-dev/master.yml
  1. label: 分支名称
  2. application: 配置文件名称重复部分
  3. profile: 配置文件名称剩余部分(可以是环境名称)

http://localhost:7051/master/springcloud-config-gitee-dev.yml访问结果如下

img-05

config-client端配置

  1. 配置当前服务链接config-server,使用远程配置文件
  2. 当配置文件修改时,使当前config-client服务的值也会修改

编码

  1. 项目结构

  2. pom.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <!--要启用bootstrap.yml,必须加此依赖-->
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--当配置文件修改,需要通过改依赖的接口通知客户端-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.5.8</version>
    </dependency>
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    </dependency>
    </dependencies>
  3. bootstrap.yml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    server:
    port: 7061

    spring:
    application:
    name: cloud-config-client
    cloud:
    config:
    label: master # 分支名称
    name: springcloud-config-gitee # 文件名称
    profile: dev # 环境名称
    uri: http://localhost:7051 # config server 的url

    eureka:
    client:
    service-url:
    defaultZone: http://localhost:7001/eureka

    # 需要调用actuator依赖下的接口,通知config client 配置文件已修改
    # curl -X POST "http://localhost:7061/actuator/refresh"
    management:
    endpoints:
    web:
    exposure:
    include: "*"
  4. ConfigClientMain7061.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /**
    * 1. 添加依赖:spring-boot-starter-actuator
    * 2. 启动刷新配置:@RefreshScope
    * 3. 开启actuator的配置文件
    */
    @RefreshScope
    @EnableEurekaClient
    @SpringBootApplication
    public class ConfigClientMain7061 {

    public static void main(String[] args) {
    SpringApplication.run(ConfigClientMain7061.class);
    }

    }
  5. ConfigController.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    @Slf4j
    @RestController
    @RequestMapping("/config")
    public class ConfigController {

    @Value("${user.nickname}")
    private String nickname;
    @Value("${user.age}")
    private Integer age;

    @GetMapping("/user")
    public String config() {
    JSONObject jsonObject = new JSONObject();
    jsonObject.set("nickname", nickname);
    jsonObject.set("age", age);
    log.info("{}", jsonObject);
    return jsonObject.toString();
    }

    }

使用

  1. http://localhost:7061/config/user

    img-06

  2. 修改配置文件信息

    1. 访问配置信息localhost:7051/master/springcloud-config-gitee-dev.yml

      img-07

    2. 访问config-clientlocalhost:7061/config/user接口:

      img-08

      此时访问的数据接并未发生改变,配置未刷新。

  3. 刷新config-client所获取的配置文件信息的两种方式

    1. 重启config-server服务

    2. curl -X POST "http://localhost:7061/actuator/refresh"

      img-09

总结

跟Nacos、Apollo相比。。这个是真不好用。

能用别的,就不要用这个。

凭感觉总结一下吧:

优点:

  • 不需要安装。其他俩安装一个比一个麻烦
  • config-server服务不怎么占用内存。nacos太占内存了,Apollo不清楚

缺点:

  • 没有现成的后台页面。Nacos、Apollo后台页面都很人性化的
  • 实际开发很不好用,还得手动刷新配置。这要是忘了刷新配置了,直接GG
-------------本文结束感谢您的阅读-------------