Apollo使用记录

文章目录

Apollo

简介

一个远程配置中心,通过长连接、轮训的方式将本地应用于远程配置中心通信,对本地应用的引入属性添加代理或包装以达到实时更新的功能。更高版本支持开启各种监控。

官方文档以及架构图

java-maven引包

java 复制代码
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>2.4.0</version>
</dependency>
  • 服务端已有部署apollo服务(configService、adminService、Eureka、configDb-可以使用应用库、metaServer)

Java程序指定配置

参数说明

属性名 说明 默认值
apollo.refreshInterval 客户端拉取服务端最新配置的频率,单位-分钟 5
apollo.meta metaServer地址
apollo.cache-dir 调整本地缓存地址 /opt/data
env 环境,大小写不敏感
apollo.cluster/idc 集群配置,可以根据不同数据中心做不同集群配置
apollo.access-key.secret 访问密钥
apollo.label 用于非固定IP应用匹配灰度规则的标签(k8s)
apollo.bootstrap.enabled 使配置在更早的阶段注入,比如使用@ConditionalOnProperty的场景或者是有一些spring-boot-starter在启动阶段就需要读取配置做一些事情
apollo.bootstrap.eagerLoad.enabled Apollo配置加载提到初始化日志系统之前(1.2.0+)
spring.config.import 通过 Config Data Loader 模式来加载配置,Spring Boot 2.4 +,如果使用需要额外引包
apollo.autoUpdateInjectedSpringProperties 自动更新spring的注入属性 true

使用option参数注入

sh 复制代码
-Dapollo.env=DEV # 指定环境
-Dapollo.cluster=xxx # 指定集群
-Dapollo.bootstrap.namespaces=application,application-dev.yml # 指定namespace
-Dapollo.bootstrap.enabled=true # 以bootstrap方式启动,而不是以配置启动
-Dapollo.bootstrap.eagerLoad.enabled=true #加载时机提前,以覆盖log配置
-Dapollo.meta=http://localhost:8080 #指定meta地址,可指定多个,使用,分割
-Dapollo.configService=http://localhost:8080 #指定config地址
-Dapp.id=cloud-demo-data # 指定应用ID

关于configurationProperties不及时刷新的解决

官方解决说明

  • 根据官方说明,使用ApolloConfigChangeListenerRefreshScope可更新指定配置,springboot版本必须支持RefreshScope,详见官方示例
  • 作者在更新一个旧有项目时,打算更新所有的ConfigurationProperties,代码如下,此种方式与RefreshScope方式冲突,ConfigurationProperties不可添加@RefreshScope
java 复制代码
@Slf4j
@Component
public class ApolloConfig {

    @Value("${apollo.bootstrap.namespaces}")
    private String namespaces;

    @Resource
    private ApplicationContext applicationContext;

    @PostConstruct
    public void init(){
      // 支持多个namespace
        List<String> list = Arrays.asList(namespaces.split(","));
        for (String namespace : list) {
            Config config = ConfigService.getConfig(namespace.trim());
            config.addChangeListener(change -> {
                log.info("change: {} ,{}",change.getNamespace(),change.changedKeys());
 // 发布更新Environment事件
              applicationContext.publishEvent(new EnvironmentChangeEvent(change.changedKeys()));
            });
        }
    }
}

关于更新动态数据源的使用

其他说明

  • apollo配置在1.9之前和之后版本对于某些配置的key有调整,1.9之前使用小驼峰:cacheDir,1.9之后使用分隔符:cache-dir
  • apollo有本地缓存功能,默认缓存地址为/opt/data/{*appId*}/config-cache,C:\opt\data\{*appId*}\config-cache,注意权限问题,基于本地缓存功能可开启本地开发模式
相关推荐
不会c+23 分钟前
02-SpringBoot配置文件
java·spring boot·后端
AI 大模型学习不踩坑26 分钟前
OpenClaw 完整教程:从安装到使用(官方脚本版)
java·人工智能·神经网络·机器学习·计算机视觉·自然语言处理·openclaw
Listen·Rain1 小时前
数据库流式查询
java·数据库
彦为君1 小时前
算法思维与经典智力题
java·前端·redis·算法
翔云 OCR API1 小时前
慧视扫描王-财务少加班
java·自动化
雨辰AI2 小时前
生产级实战:人大金仓 V9 标准化运维手册(日常巡检 + 监控告警 + 应急处置)
java·运维·数据库·后端
我是一颗柠檬2 小时前
【Java项目技术亮点】覆盖索引与索引下推优化
android·java·开发语言
云道轩2 小时前
比较IBM Transformation Advisor 和WebSphere Application Server Migration Toolkit
java·jakarta ee·open liberty·应用迁移
2601_962440842 小时前
计算机毕业设计之健身房管理系统的设计与实现
java·开发语言·课程设计·旅游·宠物
TeamDev2 小时前
JxBrowser 9.3.0 版本发布啦!
java·后端·c#·混合应用·jxbrowser·浏览器控件·异步媒体设备