springcloud config配置中心与github webhook实现动态更新配置

1、搭建config-server

  1. 新建config工程
    并将其注册到eureka上

  2. 启动类注解

    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableConfigServer
    
  3. yml

    spring:
      application:
        name: config
      cloud:
        config:
          server:
            git:
              uri: https://github.com/xxx.git
              username: xxx
              password: xxxx
              basedir: 本地配置仓库路径
    
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka
    
    
    

    uri: git仓库地址;username/password:github账户名和密码;basedir:将远程git拉取到本地的指定路径

  4. github上创建相应仓库及配置文件

  5. 浏览器端访问url格式

    例如:http://localhost:8080/release/order-dev.yml

    release: 仓库分支名称;order:对应应用的名称;-dev是环境,后面会详述

  6. 结果(在release分支下的order-dev.yml与master中的相比,多了label: release

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0drU4HFT-1571739178959)(/Users/jc/Library/Application Support/typora-user-images/image-20190920165111177.png)]

2、使用统一配置来配置order应用

核心要义:应用拿着自己需要的配置文件的名称与环境标识,去找config-server应用(统一配置中心)从github上拉取对应的配置文件到本地

扫描二维码关注公众号,回复: 9347179 查看本文章
  1. 在order工程中引入依赖

    <!--        引入config-client依赖以使用统一配置-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-config-client</artifactId>
                <version>2.1.4.RELEASE</version>
            </dependency>
       	  <!-- >https://mvnrepository.com/artifact/org.springframework.cloud/spring->cloud-starter-bus-amqp -->
      		<dependency>
        		 <groupId>org.springframework.cloud</groupId>
       		<artifactId>spring-cloud-starter-bus-amqp</artifactId>
     		</dependency>
    
  2. yml

    spring:
      application:
        name: order
      cloud:
        config:
          discovery:
            enabled: true
            service-id: CONFIG
          profile: test
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka
    

    只留下应用名order和config相关配置,service-id:eureka上注册的配置中心应用名;还有eureka的地址,以防eureka改地址后,连接不到eureka,就更不要提获取CONFIG等了

    这里的name+profile就拼接为url中的order-dev

    将yml名称修改为bootstrap.yml

    作用是启动引导,先执行yml,拉取远程配置后,再启动springboot,不然肯定要报错数据库连接失败什么的导致启动失败

至此,还没做到自动更新配置,及github更新配置后,config-client对应应用要重启才可获取最新配置

3、消息通知实现自动更新

即每次远程配置更新后,配置中心通过消息通知对应应用

以order应用为例:

  1. 配置中心引入依赖
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-bus-amqp -->
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
  1. 配置中心yml
spring:
application:
 name: config
cloud:
 config:
   server:
     git:
       uri: https://github.com/xxx.git
       username: xxx
       password: xxx
       basedir: 本地配置路径
rabbitmq:
 host: ipxxxx
 port: 5672
 username: guest
 password: guest
eureka:
client:
 service-url:
   defaultZone: http://localhost:8761/eureka
management:
endpoints:
 web:
   exposure:
     include: "*"

其中,rabbitmq因为我是部署在远端服务器的docker上,故需要配置

此外,management.endpoints.web.exposure.include:"*"是暴露所有端口,目的是暴露出/actuator/bus-refresh

  1. order应用引入依赖(同配置中心),且yml加上rabbitmq相应配置,原因同上。

  2. 对应controller加@RefreshScope实现自动刷新

package com.jachincloud.order.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
  * @description:
  * @Author: JachinDo
  * @Date: 2019/09/20 17:09
*/
@RequestMapping("/env")
@RestController
@RefreshScope
public class EnvController {

 @Value("${env}")
 private String env;

 @GetMapping("/print")
 public String print() {
     return env;
 }
}
  1. 启动上述两个应用

  2. 此时,更改github上对应配置文件后,只需访问/actuator/bus-refresh接口后,即可实现自动更新。

命令行访问:在这里插入图片描述

  1. 在github上配置webhooks自动访问/actuator/bus-refresh

注意红色部分!!
在这里插入图片描述
至此,实现了github更新配置文件,应用自动拉取并更新,无需重启应用

注意:url中的端口为配置中心运行端口

发布了28 篇原创文章 · 获赞 16 · 访问量 3191

猜你喜欢

转载自blog.csdn.net/Newbie_J/article/details/102687834