Apollo 配置中心 java 配置
简介
Apollo架构模型简单点如下图:他的用户分两类,一类相当于管理员(运维人员)往其中写入配置,一类为客户端(微服务)往配置拉取配置。
todo:流程图片
java 整合Apollo配置中心
1.添加Maven依赖
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.7.0</version>
</dependency>
注意:若版本小于1.6.0 则无法识别apollo密钥
2.配置文件
3.配置说明
app.id:在配置中心配置的应用身份信息。
apollo.bootstrap.enabled:在应用启动阶段是否向Spring容器注入被托管的properties文件配置信息。
apollo.bootstrap.eagerLoad.enabled:将Apollo配置加载提到初始化日志系统之前。
apollo.bootstrap.namespaces:配置的命名空间,多个逗号分隔,一个namespace相当于一个配置文件。
**apollo.meta:**当前环境服务配置地址,生产环境建议至少双节点,可以填写多个逗号分隔,使用一个单独的域,如 http://config.xxx.com(由nginx等软件负载平衡器支持),而不是多个IP地址,因为服务器可能会扩展或缩小。
apollo.accesskey.secret: *********************************** // 密钥
图示说明:
添加启动类配置
使用@Value 注解 获取配置
配置好apollo 之后可以通过@Value注解获取配置内容,如上图所示:我在配置文件中并未配置stage.admin 但我通过连接apollo配置中心,在上面新增stage.admin 并发布该配置,就可以获取到stage.admin 的属性值;
测试
通过接口测试获取内容如下:
当变动对应环境的配置属性值:
再次运行接口得以下结果:
可视化管理页面的使用
1.创建项目
2.创建namespaces
3.添加配置
3.1 单个配置
3.2 批量添加
3.3 发布配置
新增/修改/删除的配置 只有发布了才会生效
多环境同步配置
如上图所示 ,database-admin 的项目在dev 的环境上发布过"test-user",“test-admin"和"test-config” 的配置项,但PRO的环境并未配置,可通过dev环境同步配置:
确认同步:
同步结束后:
发布后PRO环境的配置也会生效
20221104 补充:
当Apollo服务启用时,会在本地生成缓存的配置文件 :
windows缓存文件地址:
C:\opt\data{appId}\config-cache
linux/mac缓存文件地址:
/opt/data/{appId}/config-cache
因为存在缓存的配置文件,当apollo服务停止时,并不会影响程序运行,程序会从缓存的配置文件中读取相应的配置
注意:
1.当 Apollo 服务停止后,若想直接修改缓存的配置文件是没有用的,必须在Apollo 中对该配置 修改、发布 才会生效。
2. 在JAVA 中对配置文件中的配置读取可以使用*@Value()** 注解,若没有使用Apollo配置的情况
下,当application.yml 配置文件中存在该配置,@Value 注解不需要携带默认值 如:
user.name: zhangsan
这种情况下可以直接使用@Value("${user.name}")
若没有则@Value("${user.name:zhangsan}")
但若程序配置了Apollo 配置中 并且在Apollo 配置中心配置了user.name: zhangsan
即使在application.yml 中未配置user.name: zhangsan
这种情况也可以直接使用@Value("{user.name}")
否则需要携带默认值即@Value("${user.name:zhangsan}")
【在程序中,Apollo的优先级高于application.yml】