Spring Boot Apollo监听namespace并更新配置Bean(附源码)

news/2024/10/30 11:31:00/

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党

背景

如果我们使用的配置中心是apollo的话我们经常会遇到这样的问题,就是动态更新配置Bean

动态更新配置bean

动态更新配置bean其实是很简单的,但是单纯依赖spring boot是不行的,我们还需要添加额外的依赖,就是spring cloud相关依赖
具体一个简单的实例如下

依赖

<dependencies><dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>2.0.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-context</artifactId></dependency></dependencies>

spring boot 和 spring cloud版本使用统一依赖管理具体可以看后面的源码

配置bean

  • TestProperties
@ConfigurationProperties("spring.cloud.test")
@ToString
@Data
public class TestProperties {private String name;
}

动态刷新

  • ApolloPropertiesChangedListener
@Configuration
@Slf4j
public class ApolloPropertiesChangedListener implements ApplicationEventPublisherAware {public static final String NAMESPACE = "test.yml";private ApplicationEventPublisher publisher;@ApolloConfigChangeListener(value = NAMESPACE)public void onChange(ConfigChangeEvent changeEvent) {publisher.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys()));}@Overridepublic void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {this.publisher = applicationEventPublisher;}
}

我们也可以通过注解的其他属性刷新指定的key前缀或指定的key
在这里插入图片描述

测试controller

@RestController
@RequestMapping
@EnableConfigurationProperties(TestProperties.class)
@RequiredArgsConstructor
public class TestController {private final TestProperties testProperties;@GetMapping("/test")public void test() {System.out.println(testProperties);}
}

测试

http://localhost:8090/test

我们调用接口然后修改apollo的数据
在这里插入图片描述

可以发读取到的配置修改成功了

源码

githu: https://github.com/weihubeats/weihubeats_demos/tree/master/spring-boot-demos/spring-boot-apollo


http://www.ppmy.cn/news/12237.html

相关文章

Himall商城ExpressDaDaHelper订单预发布 查询运费后发单接口

/// <summary> /// 订单预发布 查询运费后发单接口 /// </summary> /// <param name="source_id">商户编号</param> /// <param name="deliveryNo">平台订单编号</param> //…

[LCTF]bestphp2022安洵杯 babyphp

目录 <1> [LCTF]bestphp‘s revenge SoapClient触发反序列化导致ssrf serialize_hander处理session方式不同导致session注入 crlf漏洞 <2> 安洵杯 babyphp SoapClient 触发ssrf session反序列化 利用文件操作原生类读取flag <3> XCTF Final Web1 解…

12.30

反解 vim /var/named/chroot/etc/named.rfc1912.zones zone "a.com" { type master; file "a.com.zone"; }; zone "1.168.192.in-addr.arpa" { type master; file "192.168.1…

NET餐厅管理系统前端js-dwz.dialog打开一个层

//打开一个层 open:function(url, dlgid, title, options) { var op $.extend({},$.pdialog._op, options); var dialog $("body").data(dlgid); //重复打开一个层 if(dialog) { if(dial…

都2023年了,诸佬们肯定熟知RabbitMQ了吧

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;曾经在某央企公司实习&#xff0c;目前入职某税务公司。本篇文章将记录和分享RabbitMQ相关的知识点。 本篇文章记录的基础知识&#xff0c;适合在学Java的小白&#xff0c;也适合复习中&#xff…

Vuejs设计与实现10-解析器

十三、解析器 文本模式 文本模式指的是解析器在工作时所进入的一些特殊状态 解析器默认模式为 DATA&#xff0c;根据不同的标签会触发不同的模式&#xff1a; RCDATA 模式&#xff1a;<title> 标签、<textarea> 标签RAWTEXT 模式&#xff1a;<style>、&l…

linux-用户和用户组

文章目录用户用户组用户和组的关系用户 Linux中每个用户是通过User Id&#xff08;UID&#xff09;来标识的 管理员&#xff1a;root 0 普通用户&#xff1a;1-60000自动分配 系统用户&#xff1a;1-499&#xff08;CentOS6以前&#xff09;&#xff0c;1-999&#xff08;Cent…

Verilog HDL

一、基础语法 1. 基础知识 &#xff08;1&#xff09;逻辑值 逻辑0&#xff1a;低电平。 逻辑1&#xff1a;高电平。 逻辑X&#xff1a;未知&#xff0c;可能是高电平&#xff0c;也可能是低电平。 逻辑Z&#xff1a;高阻态&#xff0c;外部没有激励信号&#xff0c;是一…