在Spring Boot环境中使用Apollo配置中心时,需要进行一些基本的配置以确保Apollo能够正确地与Spring Boot应用集成,填坑前我们先对这些配置项进行介绍说明(包括必须配置项和可选配置项),以方便不太了解Apollo配置的同学(了解的请直接跳到填坑部分!!)
必须配置项
这些配置项是使用Apollo时必不可少的:
应用ID(app.id
)
- 用于标识应用的唯一标识符(每个应用在Apollo中都有一个唯一的
app.id
,用于区分不同的应用配置 - 例如:
app.id = java-project
)
Apollo服务发现地址(apollo.meta
)
- 指定Apollo配置服务的地址,应用通过这个地址来获取在Apollo中配置的信息
- 例如:
apollo.meta = http://apollo.meta
是否启用Apollo(apollo.bootstrap.enabled
):
- 一个布尔值,用于指示是否启用Apollo配置中心(
true
表示启用/false
表示不启用) - 例如:
apollo.bootstrap.enabled = true
可选配置项
这些配置项是非必须的,可以按需选择:
是否在日志系统初始化前加载Apollo配置(apollo.bootstrap.eagerLoad.enabled
)
- 控制是否在日志系统初始化之前加载Apollo配置(!!!这个配置是本文这个坑的关键)
false
:配置加载发生在 Spring Boot 应用的Environment
准备阶段,日志系统初始化之后true
:配置加载提前到日志系统初始化之前,允许应用在启动时就能使用 Apollo 中的配置
- 例如:
apollo.bootstrap.eagerLoad.enabled=true
命名空间(apollo.bootstrap.namespaces
)
- 指定需要加载的Apollo命名空间,默认为
application
,如果有多个命名空间,可以用逗号分隔 - 例如:
apollo.bootstrap.namespaces = application
安全拉取密钥(apollo.accesskey.secret
)
- 用于Apollo的安全认证,保护配置不被未授权访问
- 例如:
apollo.accesskey.secret = xx
集群配置(apollo.cluster
)
- 指定应用所在的集群,用于区分不同环境的配置
- 例如:
apollo.cluster = hk
缓存路径(apollo.cacheDir
)
- 指定Apollo配置的本地缓存路径,以便在配置中心不可用时使用本地缓存
- 例如:
apollo.cacheDir = /opt
配置顺序(apollo.property.order.enable
)
- 控制是否保持与Apollo配置页面的配置顺序一致
- 例如:
apollo.property.order.enable = true
补充~~
- 配置注入:Spring Boot的配置会通过
@Value
注解注入到应用中。 - 配置更新:Apollo支持动态配置更新,当配置中心的配置发生变化时,应用可以实时接收到这些变化并应用新的配置。
- 安全性:使用
apollo.accesskey.secret
可以增加配置的安全性,防止未授权的访问。
基础知识补充完毕~~我们开始填坑!
前坑回顾
这是一个使用了Apollo配置的项目,类似的项目有两三个,但是只有这个项目(我们姑且称它为项目X)没有采集到日志,我前后对比了Apollo中的配置项,项目中的日志配置文件,但一直没找出项目X日志采集不到的原因,直到有一天一位大哥在查看项目的.yml文件时,发现……
# 服务器
server:port: 8080
app:# apollo应用idid: account
env: DEVapollo:configService: xxxmeta: xxxcacheDir: ./bin/apollo-configbootstrap:enabled: trueeagerLoad:enabled: false
可以看到里面有一个apollo.bootstrap.eagerLoad.enabled=true
就像文章一开始介绍的,这个值决定了 Apollo 配置中心的配置是否在 Spring Boot 应用启动阶段被提前加载(这对于确保应用的日志系统能够按照 Apollo 中的配置正确初始化非常有用),我立面对比了别的项目,这个配置都是清一色的true
。。。
于是当把项目X设置为apollo.bootstrap.eagerLoad.enabled=true
以后,日志就采集到了!!!
填坑完毕~~~~