【Apollo配置中心】集成springboot自动监听属性变更和动态发布配置

embedded/2024/12/22 20:29:01/

1. 背景

在实际项目中,Spring Boot项目结合使用Apollo配置中心时,经常会遇到需要更新Apollo上的项目的一些配置,比如测试环境或生产环境中,需要修改某个类的属性值,如果我们在Apollo上更新了配置,已经在运行的Spring Boot项目里默认是不生效的。为了避免重启项目才能生效,需要对Apollo配置更新进行监听,并进行一些处理,达到配置动态更新并生效。
在这里插入图片描述

2. 代码

maven依赖引入
	  <!-- Apollo配置中心 --><dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>1.4.0</version></dependency><!-- 监听apollo配置, 实时刷新 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-context</artifactId><version>3.1.7</version></dependency>
监听类实现
java">package com.zsx.listener;import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Configuration;/**** @description: 监听apollo配置, 实时刷新* @author: zsx* @date: 2024/6/12 10:56*/
@Configuration
public class ApolloConfigListener implements ApplicationContextAware {/*** 日志*/private static final Logger LOGGER = LoggerFactory.getLogger(ApolloConfigListener.class);private ApplicationContext applicationContext;/*** 配置监听* ApolloConfigChangeListener > value 属性默认 命名空间 "application"** 示例: @ApolloConfigChangeListener(value = {"application", "test_space"})*/@ApolloConfigChangeListener(value = {"application", "application-comm", "application-dao", "common-redis"})private void onChange(ConfigChangeEvent changeEvent) {for (String key : changeEvent.changedKeys()) {LOGGER.info("apollo key = {} refresh", key);}// 更新相应的bean的属性值,主要是存在@ConfigurationProperties注解的beanthis.applicationContext.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys()));}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}
}

http://www.ppmy.cn/embedded/50148.html

相关文章

ffmpeg封装和解封装介绍-(6)完成重封装mp4文件并截断10s~20s的视频并生成10s视频文件

源文件&#xff1a; #include <iostream> #include <thread> using namespace std; extern "C" { //指定函数是c语言函数&#xff0c;函数名不包含重载标注 //引用ffmpeg头文件 #include <libavformat/avformat.h> } //预处理指令导入库 #pragma …

Flutter 简化CustomPainter的绘制

文章目录 前言一、为何简化&#xff1f;1、通常做法&#xff08;1&#xff09;、绘制形状1&#xff08;2&#xff09;、绘制形状2&#xff08;3&#xff09;、界面显示 2、简化 二、完整代码三、使用示例1、绘制图形2、动态触发绘制 总结 前言 使用Flutter做界面时&#xff0c…

浏览器调试小技巧

一. 使用XSwitch工具代理本地服务地址 1. 谷歌提供了一个扩展程序: XSwitch 工具描述: 一个重定向URL并允许CORS使本地开发体验轻松愉快的工具。 ps: 这个工具只有谷歌有, 只能翻墙后下载 安装成功后 长这样: 2. 全局安装http-server , 用于在本地启动一个服务 npm i http-…

WPF 使用Image控件显示图片

Source属性 Source属性用来告诉Image组件要展示哪张图片资源的一个入口&#xff0c;通常是图片的路径。也许是本地路径&#xff0c;也许是网络路径。 本地图片路径加载方式 使用相对路径&#xff0c;相对于工程目录的路径&#xff0c;当设置Width属性时&#xff0c;图片会等…

Nginx+KeepAlived高可用负载均衡集群的部署

目录 一.KeepAlived补充知识 1.一个合格的群集应该具备的特点 2.健康检查&#xff08;探针&#xff09;常用的工作方式 3.相关面试问题 问题1 问题2 二.Keepealived脑裂现象 1.现象 2.原因 硬件原因 运用配置原因 3.解决 4.预防 方法1 方法2 方法3 方法4 三.…

Java Websocket分片发送

一、分片发送和接收(复杂) 如果数据量太大&#xff0c;需要分多次发送&#xff0c; 需要考虑数据划分和重组的问题。 二、具体思路 每次发送和接收用一个布尔值变量指定是否为最后一个分片。 三、具体使用 (一)字符串分片发送&#xff1a; sendText(文本&#xff0c; 布尔值)…

【Jmeter】插件详解:PerfMon Metrics Collector 服务器性能监控插件

目录 一、前言 二、PerfMon Metrics Collector 插件详解 (1)插件简介 (2)功能介绍 (3)应用场景 (4)使用指南 ① 环境准备 ② 服务端插件配置 ③ 监听器配置 ④ 图表设置 ⑤ 非 GUI 模式 三、ServerAgent 下载 四、ServerAgent 安装 (1)安装 (…

C++~~期末复习题目讲解---lijiajia版本

目录 1.类和对象 &#xff08;3&#xff09;创建对象的个数 &#xff08;3&#xff09;全局变量&#xff0c;局部变量 &#xff08;4&#xff09;构造函数的执行次数 &#xff08;5&#xff09;静态动态析构和构造顺序 &#xff08;6&#xff09;初始化顺序和声明顺序 &a…