CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

SpringCloudConfig(3)-动态刷新配置信息-免费源码丞旭猿

前言

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

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

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

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

首先,在上一篇

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

org.springframework.bootspring-boot-starter-actuator

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

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

management:endpoints:web:exposure:include:refresh

由于本文只会用到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注解,如下:

importorg.springframework.beans.factory.annotation.Value;importorg.springframework.cloud.context.config.annotation.RefreshScope;importorg.springframework.context.annotation.Configuration;@Configuration@RefreshScopepublicclassServiceConfig{@Value("${config.vendor}")privateStringvendor;@Value("${config.accountType.default}")privateStringaccountType;publicStringgetVendor(){returnvendor;}publicvoidsetVendor(Stringvendor){this.vendor=vendor;}publicStringgetAccountType(){returnaccountType;}publicvoidsetAccountType(StringaccountType){this.accountType=accountType;}}

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

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

2. 测试

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

现在我们来测试一下。

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

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

spring.jpa.database:"MYSQL"spring.datasource.platform:"org.hibernate.dialect.MySQL55Dialect"spring.jpa.show_sql:"true"spring.database.driverClassName:"com.mysql.jdbc.Driver"spring.datasource.url:"jdbc:mysql://localhost:3306/msproject?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8"spring.datasource.username:"msproject"spring.datasource.password:"msproject"spring.datasource.testWhileIdle:"true"spring.jpa.hibernate.ddl-auto:"update"spring.jpa.properties.hibernate.dialect:"org.hibernate.dialect.MySQL55Dialect"config.vendor:"yglong.com"config.accountType.default:"administrator"

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

返回值与配置文件一致。

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

config.vendor: "example.yglong.com"

修改保存后,提交Github。

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

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

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

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

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

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

spring.datasource.password: "msproject111"

然后调用/actuator/refresh:

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

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

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

我们将密码改回正确的:

spring.datasource.password: "msproject"

再次刷新:

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

成功返回所有账户信息。

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

3. 总结

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

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

(完)

新码农客栈

有趣的灵魂在等你

微信长按扫码可关注

声明:本文部分素材转载自互联网,如有侵权立即删除 。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容