easyconnect获取服务端配置信息失败_Spring Cloud Config (3) - 动态刷新配置信息

前言

当微服务部署上线后,修改服务的配置是很常见的。如何做到在不重新编译,不重新部署,甚至不重启微服务的情况下,让修改立即生效?

Spring Cloud为我们提供了一个监控模块:Actuator。该模块提供了一系列监控服务状态的服务端点,包括info,health,env等等,我们可以使用这些端点查看服务的信息,健康状况,运行环境参数等。

这个模块还提供了一个refresh端点,它就是本文将要介绍的用于刷新配置信息的端点。本文将详细介绍如何使用Actuator,在不重启微服务的情况下刷新配置。

1. 为服务添加刷新配置功能

首先,在上一篇

《深入浅出Spring Cloud系列》:Spring Cloud Config (2) - 获取服务配置信息​mp.weixin.qq.com
54484b3a695ec909857940025c13d72e.png

实现的account-service服务的pom.xml中引入actuator依赖。如下:

<dependency>
  

引入这个依赖后,Spring在启动时就会自动为我们暴露一个/actuator端点,但默认情况下,它只提供了/actuator/info和/actuator/health两个端点,并没有暴露/actuator/refresh端点。

因此我们需要在application.yml中打开refresh端点。如下:

management

由于本文只会用到refresh端点,因此上面的配置中,我只开启了refresh端点。

当然,你也可以为actuator开启所有端点,只需要将refresh改为*,匹配所有即可。如下:

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

我们也可以选择开启部分端点,可以像下面这样,指定具体的端点名称,以逗号分隔:

management:
  endpoints:
    web:
      exposure:
        include: info, health, refresh, env

要想知道Actuator具体支持哪些端点,你可以查阅Spring官方文档。

当然还有一个办法,可以将所有端点全部开启,然后启动服务,访问http://localhost:8082/actuator端点来查看,它将返回所有支持的服务端点。

配置好pom.xml后,我们还需要在代码中添加一项配置。即在ServiceConfig类上添加@RefreshScope注解,如下:

import 

由于ServiceConfig类中注入了配置文件里的配置项,如果不添加@RefreshScope注解,当调用/actuator/refresh时,这些项的值不会被刷新。

请记住: 所有注入了配置项的类,都需要添加@RefreshScope注解。

2. 测试

至此,我们已经完成了配置,可见是多么的简单。

现在我们来测试一下。

启动配置服务器config-server,启动account-service服务。

首先,我们检查一下配置文件account-service.yml中的各个配置项的值。如下:

spring.jpa.database

config.vendor的值为“yglong.com”,我们访问http://localhost:8082/v1/account/vendor端点看看返回:

2ae1fced24a65800b063226d5685adf8.png

返回值与配置文件一致。

现在我们修改配置文件account-service.yml,将config.vendor的值改为如下:

config.vendor: "example.yglong.com"

修改保存后,提交Github。

提交后,我们调用/actuator/refresh端点为服务刷新配置,注意请求为POST。如下:

b58b9e8b8693a8f4b42304a8a68e52ad.png

/actuator/refresh端点会返回一个list,代表哪些配置项的值被刷新了。从上面的返回可以看出,spring检测到了config.vendor的值的变化,且为服务刷新了该配置项的值。

我们再次访问http://localhost:8082/v1/account/vendor:

77e99c082ea635549239d79f968f4c17.png

可以看到,返回值与配置文件中的值一致。

除了修改自定义的配置项外,同理,我们也可以修改访问数据库相关的配置项,如数据库密码配置项spring.datasource.password。

我们尝试将访问数据库的密码修改为一个错误的密码,如下:

spring.datasource.password: "msproject111"

然后调用/actuator/refresh:

6406f4734d65658915e299e7f9a74936.png

返回表示spring.datasource.password的值被成功刷新了。

现在,我们尝试访问http://localhost:8082/v1/account从数据库中获取所有账户信息:

3fcd8e293a409581ff943c6da4c512ff.png

可以看到,访问失败了,从返回的message可以看出,连接数据库失败了。因为我们将密码改成了错误的密码。

我们将密码改回正确的:

spring.datasource.password: "msproject"

再次刷新:

6406f4734d65658915e299e7f9a74936.png

再次访问http://localhost:8082/v1/account:

5b65755de1ef4932eaabedd60fddae37.png

成功返回所有账户信息。

可以看到,Actuator不仅支持自定义配置项的刷新,也支持Spring内置的配置项的刷新,如连接数据库相关的配置项,无需重启服务。

3. 总结

Spring Actuator提供了强大的服务监控功能,本文仅使用了其中的/actuator/refresh端点,演示了如何为服务动态刷新配置信息的功能。

使用Actuator实现动态刷新配置的功能非常简单,只需简单的几项配置即可完成。

(完)

ba323af3dba4617797a17b15a14a01cd.png

新码农客栈

有趣的灵魂在等你

微信长按扫码可关注

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值