SpringCloud集成SpringCloudConfig分布式配置中心

前言

SpringCloud全家桶中的分布式配置中心SpringCloudConfig, 它使用git来管理配置文件, 在修改配置文件后只需要调用一个接口就可以让新配置生效, 非常方便.

一.快速开始

SpringCloudConfig分为两部分, 服务端和客户端, 服务端是用来提供配置文件信息的, 而客户端是用来使用配置文件信息的, 我们接下来就开始集成.

1.SpringCloudConfig服务端

新建一个Module

之后next, 完成项目创建, 工程目录是这样的, 别忘了import changes

 

之后我们做简单的配置, 配置文件有两种格式application.propertiesapplication.yml, 原理基本相同, 这里就不赘述了, 之前的文章都是用yml做教程, 我们这篇文章就用.properties来做

首先我们配置一下application.properties

# 服务端口
server.port = 8088
# 注册中心url
eureka.client.service-url.defaultZone = http://localhost:8081/eureka
# 注册中心名字
spring.application.name = service-config
# 配置存储地址(git)
spring.cloud.config.server.git.uri = https://gitee.com/jskk/spring-cloud-config.git
# 存储文件夹
spring.cloud.config.server.git.search-paths = myconfig
# git主分支
spring.cloud.config.label = master

每一项都有注释, 但是出于观看本文的人有可能并不懂git所以这里我就来简单演示一下如何创建git仓库和配置文件

1.创建git账号

https://gitee.com

给你一个地址, 自己领悟.

2.创建git仓库

在文件夹中新建两个配置文件, 可以是.properties.yml, 我们这里就两种格式都试试, 你在实际开发中选一种就好, 文件的命名是有规范的。服务名称-环境. properties

否则你的服务器无法读取配置文件, 我们来查看一下service-a的配置文件名称

所以我们的配置文件应该叫:service-objcat-a-dev. properties

配置文件的内容如下:

注意两种不同格式的配置文件, 语法是不同的, 但是基本原理是相同的, 注意别写错了.

之后我们在配置中心的入口写一下注释

之后我们运行一下吧!

启动之后, 我们只需要输入下边的网址就可以访问你的配置中心

http://localhost:8088/service-objcat-a-dev.properties

访问结果如上图.

如果上面可以访问, 证明配置中心服务器没有问题, 接下来我们就来使用分布式配置中心来动态修改配置吧.

我们就给service-a开启分布式配置服务吧!

首先我们在pom中添加依赖, 来导入分布式配置中心客户端的库, 我在开始的时候说过了, 分布式配置中心有客户端和服务端两种, 上文中服务端已经配置好了, 下面我们就来配置客户端

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-client</artifactId>
</dependency>

之后我们修改一下配置文件

application.yml修改成bootstrap.yml这里说一下, 这两个名字都是应用的配置文件, 但是bootstrap.yml会先执行, 其次是配置分布式配置中心服务器的规范就是在bootstrap.yml中配置的, 这俩个配置文件可以共存, 这里为了方便起见, 所以直接就改名了, 我们继续

spring:
  application:
    #服务名称 - 服务之间使用名称进行通讯
    name: service-objcat-a
  cloud:
    config:
      profile: dev
      discovery:
        enabled: true
        service-id: service-config
eureka:
  client:
    service-url:
      #填写注册中心服务器地址
      defaultZone: http://localhost:8081/eureka
    #是否需要将自己注册到注册中心
    register-with-eureka: true
    #是否需要搜索服务信息
    fetch-registry: true

对比我们之前的配置文件可以看到, 关键就是下面的一段

server:
  port: 8082
spring:
  application:
    #服务名称 - 服务之间使用名称进行通讯
    name: service-objcat-a
  cloud:
    config:
      # 配置文件环境
      profile: dev
      discovery:
        # 开启配置中心
        enabled: true
        # 配置中心别名
        service-id: service-config
eureka:
  client:
    service-url:
      #填写注册中心服务器地址
      defaultZone: http://localhost:8081/eureka
    #是否需要将自己注册到注册中心
    register-with-eureka: true
    #是否需要搜索服务信息
    fetch-registry: true

注意别名一定要跟你上面配置服务器的名称一致, profile千万不要乱写, 写你需要应用配置文件的环境, 还记得我们的配置文件命名方式吗服务名-环境.yml

到这里已经配置完成了, 我们来写个接口验证一下吧!

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

@RequestMapping("/hello")
String hello() {
    return name;
}

@value就是从配置文件中读取一个字段, 我们name这个字段是存在服务端的, 所以如果可以读取出来, 就证明分布式配置中心是可以用的, 之后我们来运行一下服务

之后我们来访问一下接口

http://localhost:8082/hello

发现名字就是我们git上面配置的, 说明配置中心已经生效了, 之后我们修改配置中心上的内容, 看是否可以动态修改配置

之后我们再次访问一下接口

我们发现name字段并没有更新

这个想要更新其实很简单, 重启服务即可, 这个方法虽然管用但是使用起来非常不方便, 重启服务器就会造成用户无法访问, 这并不是分布式配置中心想要看到的

我们接下来要做的就是线上刷新字段, 不需要重启服务器, 我们首先给service-a导入监控模块的包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

在配置文件中增加如下字段 暴露所有endpoints

management:
  endpoints:
    web:
      exposure:
        include: "*"

然后我们在控制器中配置刷新, 只有配置过刷新注解的控制器中的值才会被刷新.

之后我们重启服务

发现配置是生效的, 之后我们修改git上的配置文件

改成了hehehe, 这回我们访问接口, 毫无疑问肯定是没刷新的

那我们如何让它刷新呢, 只需要调用一个刷新接口即可, 注意一定要使用post请求, 可以使用命令行或者postman.

命令行:

curl -X POST http://localhost:8082/actuator/refresh

postman:

调用完毕之后如图所示

我们再次访问就可以看到刷新了

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值