Spring Cloud(六)《基于github webhook动态刷新服务配置》

简介: 在实际开发中经常会有一个叫做配置中心的服务,这个服务经过变更参数来动态刷新线上业务数据行为配置。比如;行为开关、活动数据、黑白名单、本地/预发/线上环境切换等等,这些配置信息往往需要在我们不重启系统的时候就可以被更新执行。那么我们一般会使用具备此类属性在分布式系统中适合的组件进行开发配置中心,像是zookeeper、redis发布订阅、或者http定时轮许拉取,他们都可以做成统一配置中心服务。而在Spring Cloud Config 中,默认采用 Git 来存储配置信息,所以使用 Spring Cloud Config 构建的配置服务器,天然就支持对微服务应用配置信息的版本管理,在加上Git

前言介绍

在实际开发中经常会有一个叫做配置中心的服务,这个服务经过变更参数来动态刷新线上业务数据行为配置。比如;行为开关、活动数据、黑白名单、本地/预发/线上环境切换等等,这些配置信息往往需要在我们不重启系统的时候就可以被更新执行。那么我们一般会使用具备此类属性在分布式系统中适合的组件进行开发配置中心,像是zookeeper、redis发布订阅、或者http定时轮许拉取,他们都可以做成统一配置中心服务。而在Spring Cloud Config 中,默认采用 Git 来存储配置信息,所以使用 Spring Cloud Config 构建的配置服务器,天然就支持对微服务应用配置信息的版本管理,在加上Github的Webhook钩子服务,可以在我们push等行为操作的时候,自动执行我们的http行为,以达到自动刷新配置服务。

环境准备

  1. jdk 1.8、idea2018、Maven3
  2. Spring Boot 2.0.6.RELEASE
  3. Spring Cloud Finchley.SR2
  4. 需要有一个Git帐号,用来创建配置中心以及开启Webhooks服务,添加回调

案例说明

通过在个人Git创建配置服务工程,开启Webhooks服务添加回调钩子http://xxx:port/actuator/refresh在更新配置后自动刷新服务配置内容,如图;

24.jpg

代码示例

1itstack-demo-springcloud-06
 2├── itstack-demo-springcloud-config-client
 3│   └── src
 4│       └── main
 5│           ├── java
 6│           │   └── org.itstack.demo
 7│           │        ├── web
 8│           │        │   └── ConfigClientController.java      
 9│           │        └── ConfigClientApplication.java
10│           └── resources   
11│               ├── application.yml
12│               └── bootstrap.yml
13└── itstack-demo-springcloud-config-server
14    └── src
15        └── main
16            ├── java
17            │   └── org.itstack.demo   
18            │        └── ConfigServerApplication.java
19            └── resources   
20                └── application.yml

完整代码欢迎关注公众号:bugstack虫洞栈 回复“SpringCloud专题”进行下载

itstack-demo-springcloud-config-client | 配置获取客户端方,提供自动刷新Http

web/ConfigClientController.java & 添加注解@RefreshScope自动刷新配置

1/**
 2 * 微信公众号:bugstack虫洞栈 | 沉淀、分享、成长,专注于原创专题案例
 3 * 论坛:http://bugstack.cn
 4 * Create by 付政委 on @2019
 5 */
 6@RestController
 7@RefreshScope
 8public class ConfigClientController {
 9
10    @Value("${info.profile:error}")
11    private String profile;
12
13    @GetMapping("/config")
14    public Mono<String> config() {
15        return Mono.justOrEmpty(profile);
16    }
17
18}
1

ConfigClientApplication.java & 普通配置即可

1/**
 2 * 微信公众号:bugstack虫洞栈 | 沉淀、分享、成长,专注于原创专题案例
 3 * 论坛:http://bugstack.cn
 4 * Create by 付政委 on @2019
 5 */
 6@SpringBootApplication
 7public class ConfigClientApplication {
 8
 9    public static void main(String[] args) {
10        SpringApplication.run(ConfigClientApplication.class, args);
11    }
12
13}

application.yml & 需要配置endpoints,这样才可以暴漏刷新服务

1spring:
 2  application:
 3    name: itstack-demo-springcloud-config-client
 4server:
 5  port: 9001
 6
 7# /actuator/refresh 这个 Endpoint 暴露出来
 8management:
 9  endpoints:
10    web:
11      exposure:
12        include: refresh

bootstrap.yml & 配置中心服务配置,http://localhost:7397

1spring:
 2  cloud:
 3    config:
 4      uri: http://localhost:7397  # 配置中心的具体地址;itstack-demo-springcloud-config-server
 5      name: config-client         # 对应 {application} 部分,例如;config-client-dev = 只取最后一个符号'-'之前的
 6      profile: dev                # 对应 {profile} 部分
 7      label: master               # 对应 {label} 部分,即 Git 的分支。如果配置中心使用的是本地存储,则该参数无用
 8
 9#配置文件会被转换成 Web,访问规则如下;
10#/{application}/{profile}[/{label}]
11#/{application}-{profile}.yml
12#/{label}/{application}-{profile}.yml
13#/{application}-{profile}.properties
14#/{label}/{application}-{profile}.properties

itstack-demo-springcloud-config-server | 配置提供服务端方,链接Git配置工程地址

ConfigServerApplication.java & 添加注解@EnableConfigServer设置成配置服务中心

1/**
 2 * 微信公众号:bugstack虫洞栈 | 沉淀、分享、成长,专注于原创专题案例
 3 * 论坛:http://bugstack.cn
 4 * Create by 付政委 on @2019
 5 */
 6@SpringBootApplication
 7@EnableConfigServer
 8public class ConfigServerApplication {
 9
10    public static void main(String[] args) {
11        SpringApplication.run(ConfigServerApplication.class, args);
12    }
13
14}

application.yml &

1server:
 2  port: 7397
 3
 4spring:
 5  application:
 6    name: itstack-demo-springcloud-config
 7  cloud:
 8    config:
 9      server:
10        git:
11          uri: https://github.com/fuzhengwei/itstack-demo-config  # 换成自己的配置Git仓库的地址,如果没有可以新建工程地址,也可以克隆我的
12          search-paths: config-repo                               # Git仓库地址下的底层配置文件名称,如果配置多个用逗号','分割。
13
14# 如果配置中心需要访问权限,则开启配置
15# spring.cloud.config.server.git.username:Github账户
16# spring.cloud.config.server.git.password:Github密码

测试验证

  1. 准备好自己Github的配置仓库,也可以克隆我的Git;https://github.com/fuzhengwei/itstack-demo-config {有一组配置配置文件}
  2. 配置Webhooks,在https://github.com/换你自己的fuzhengwei/换你自己的itstack-demo-netty/settings/hooks/new
  3. 分别启动服务
  1. itstack-demo-springcloud-config-server 配置Server
  2. itstack-demo-springcloud-config-client 配置Client
  1. 访问配置服务,端口7397;http://localhost:7397/config-client/dev
1{
 2    "name": "config-client",
 3    "profiles": [
 4        "dev"
 5    ],
 6    "label": null,
 7    "version": "ea0b1a1017595d542aa01b8b2bda68f9620dd81a",
 8    "state": null,
 9    "propertySources": [
10        {
11            "name": "https://github.com/fuzhengwei/spring-cloud-study/config-repo/config-client-dev.yml",
12            "source": {
13                "info.profile": "dev bus"
14            }
15        }
16    ]
17}
1info:
2    profile: dev bus
  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties
  1. 访问配置文件;http://localhost:8080/config-client-dev.yml {可以直接访问查看配置信息}
  2. 访问规则{配置文件会被转换成 Web 接口,规则如下}
  3. 访问结果
  1. 访问使用配置的客户端,端口9001;http://localhost:9001/config {可以提交配置代码反复刷新测试}
1dev bus

综上总结

  1. Spring Cloud Config 可以很方便的依赖于Github提供的回调钩子进行更新配置,同时也支持本地配置
  2. Webhooks 不止可以用于变更配置,还可以用于一起启动触发工程打包部署发布的行为
  3. 不要局限于知识点,往往每一个新知识所带来的架构设计更值得学习,这些都可以灵活的用于项目系统中


目录
相关文章
|
4天前
|
SQL Java 数据库连接
(自用)Spring常用配置
(自用)Spring常用配置
12 0
|
26天前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
33 1
|
27天前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
76 0
|
4天前
|
JSON Java 数据库连接
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
11 1
|
4天前
|
Java 数据库连接 Spring
简化配置,提高灵活性:Spring中的参数化配置技巧
简化配置,提高灵活性:Spring中的参数化配置技巧
14 0
|
4天前
|
Java Shell 测试技术
一次配置,多场景适用:Spring Boot多套配置文件的深度剖析
一次配置,多场景适用:Spring Boot多套配置文件的深度剖析
16 0
一次配置,多场景适用:Spring Boot多套配置文件的深度剖析
|
8天前
|
Java 容器
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
11 0
|
26天前
|
Java 数据库连接 Spring
Spring5深入浅出篇:Spring配置⽂件参数化
该文档介绍了Spring配置文件参数化的概念和步骤。目的是将经常需要修改的配置,如数据库连接参数,从主配置文件中分离到一个单独的`.properties`文件,以便于管理和维护。步骤包括创建小型配置文件(如`db.properties`),在`applicationContext.xml`中引入该文件,并使用`${key}`语法在Spring配置文件中引用这些参数。最终通过测试验证配置文件参数化的成功。
|
27天前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
771 0
|
28天前
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(三)Eureka服务注册中心
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(三)Eureka服务注册中心
44 1