监听 apollo 配置变化

约定不等于承诺〃 2022-12-02 13:52 461阅读 0赞

监听 apollo 配置 cleanPrecisionVersion 变化的类

源码

  1. @Component
  2. @Order(value = Ordered.HIGHEST_PRECEDENCE)
  3. @Slf4j
  4. public class InitApolloConfigure implements CommandLineRunner {
  5. // 内存缓存
  6. private volatile ConcurrentHashMap<String, List<String>> cleanPrecisionMap = new ConcurrentHashMap();
  7. // apollo 中配置 cleanPrecision 版本的 KEY
  8. private static final String CLEAN_PRECISION_VERSION = "cleanPrecisionVersion";
  9. //inject config for namespace application
  10. @ApolloConfig
  11. private Config config;
  12. @Reference(version = "${dubbo.order.application.version}")
  13. private ICleanPrecisionConfigBiz cleanPrecisionConfigBiz;
  14. @Override
  15. public void run(String... args) throws Exception{
  16. // 加载 namespace application 的配置
  17. Set<String> configs = config.getPropertyNames();
  18. if (CollectionUtils.isNotEmpty(configs)) {
  19. // 项目启动,加载数据到内存中
  20. setInitCleanPrecisionMap();
  21. monitorApolloConfigurationChange(config);
  22. }
  23. }
  24. private void setInitCleanPrecisionMap() {
  25. List<CleanPrecisionConfig> list = cleanPrecisionConfigBiz.getCleanPrecisionConfigList();
  26. if (CollectionUtils.isEmpty(list)) {
  27. // 手动抛出运行时异常
  28. String initCleanPrecisionMapMsg = "项目启动,查询 DB 为空!" + " 服务器 IP:" + IpUtil.getIp();
  29. throw new RuntimeException(initCleanPrecisionMapMsg);
  30. } else {
  31. setMap(list);
  32. }
  33. }
  34. private void monitorApolloConfigurationChange(Config config) {
  35. config.addChangeListener(configChangeEvent -> {
  36. // 监听 apollo 配置中发生变化的 KEY
  37. Set<String> keys = configChangeEvent.changedKeys();
  38. if (CollectionUtils.isNotEmpty(keys) && keys.contains(CLEAN_PRECISION_VERSION)) {
  39. // KEY 变化,重新加载数据到内存中
  40. setUpdateCleanPrecisionMap();
  41. }
  42. });
  43. }
  44. }

参考文档

  • springboot-监听apollo配置

发表评论

表情:
评论列表 (有 0 条评论,461人围观)

还没有评论,来说两句吧...

相关阅读

    相关 监听文件夹变化

    现象: 监听文件夹的变化:如新建、修改、删除文件或者文件夹 方法: 1:创建测试类设置主函数、构造观察类设置监听间隔时间、调用监听文件夹变化 ![在这里插入图片描