vue视频教程 css function oauth Pure CSS vue基础教程 vue优势 react视频教程 bootstrap框架 jquery使用ajax oracle删除字段sql python编程练习题 oracle查询数据库 vim跳到文件末尾 pcm接口 linux撤销 jquery validate mysql建表 python环境配置 python怎么配置环境 python函数参数 python基础知识 java发邮件 java获取当前年份 java数组扩容 java判断 java系统学习 java字符比较 网站后台模板 华为线刷工具 选择模拟位置信息应用 js文件上传 python图片处理 js字符串比较 操作系统安装 文件分割 360越狱版 驱动程序更新 excel后缀 g4560配什么显卡
当前位置: 首页 > 学习教程  > 编程语言

监听 apollo 配置变化

2020/8/31 14:05:41 文章标签:

监听 apollo 配置 cleanPrecisionVersion 变化的类

源码

@Component
@Order(value = Ordered.HIGHEST_PRECEDENCE)
@Slf4j
public class InitApolloConfigure implements CommandLineRunner {

	// 内存缓存
    private volatile ConcurrentHashMap<String, List<String>> cleanPrecisionMap = new ConcurrentHashMap();
    // apollo 中配置 cleanPrecision 版本的 KEY
    private static final String CLEAN_PRECISION_VERSION = "cleanPrecisionVersion";
    //inject config for namespace application
    @ApolloConfig
    private Config config;
    @Reference(version = "${dubbo.order.application.version}")
    private ICleanPrecisionConfigBiz cleanPrecisionConfigBiz;

    @Override
    public void run(String... args) throws Exception{
        // 加载 namespace application 的配置
        Set<String> configs = config.getPropertyNames();
        if (CollectionUtils.isNotEmpty(configs)) {
            // 项目启动,加载数据到内存中
            setInitCleanPrecisionMap();
            monitorApolloConfigurationChange(config);
        }

    }

    private void setInitCleanPrecisionMap() {
        List<CleanPrecisionConfig> list = cleanPrecisionConfigBiz.getCleanPrecisionConfigList();
        if (CollectionUtils.isEmpty(list)) {
            // 手动抛出运行时异常
            String initCleanPrecisionMapMsg = "项目启动,查询 DB 为空!" + " 服务器 IP:" + IpUtil.getIp();
            throw new RuntimeException(initCleanPrecisionMapMsg);
        } else {
            setMap(list);
        }

    }

    private void monitorApolloConfigurationChange(Config config) {
        config.addChangeListener(configChangeEvent -> {
            // 监听 apollo 配置中发生变化的 KEY
            Set<String> keys = configChangeEvent.changedKeys();
            if (CollectionUtils.isNotEmpty(keys) && keys.contains(CLEAN_PRECISION_VERSION)) {
                // KEY 变化,重新加载数据到内存中
                setUpdateCleanPrecisionMap();
            }
        });

    }

}

参考文档

  • springboot-监听apollo配置

本文链接: http://www.dtmao.cc/news_show_150169.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?