本文目录导读:

- 引入依赖
- 配置 Apollo 元服务器地址
- 获取配置值
- 配置 Namespace 和 Cluster(可选)
- 重要:开启 Apollo 配置监听(自动刷新)
- 完整 Spring Boot 集成示例
- 常见问题与排查
- 服务端部署(快速了解)
Apollo(通常指携程开源的配置中心 Apollo)的集成主要分为客户端集成和服务端部署两部分,这里主要介绍如何在 Java 项目中集成 Apollo 客户端。
以下是标准集成步骤:
引入依赖
在你的 pom.xml(Maven项目)或 build.gradle(Gradle项目)中添加 Apollo 客户端依赖。
Maven示例:
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>2.2.0</version> <!-- 建议使用最新稳定版 -->
</dependency>
Gradle示例:
implementation 'com.ctrip.framework.apollo:apollo-client:2.2.0'
配置 Apollo 元服务器地址
Apollo 客户端需要知道服务端(Config Service)的地址,通常通过 app.properties 文件或 系统参数 配置。
在 resources/META-INF/app.properties 中配置(推荐)
# 应用ID,需与Apollo Portal上创建的应用ID一致 app.id=your-app-id # Apollo Meta Server地址(就是Config Service的地址) apollo.meta=http://your-apollo-config-service:8080
通过 JVM 启动参数配置(适用于不方便修改文件的情况)
-Dapp.id=your-app-id -Denv=DEV -Dapollo.meta=http://your-apollo-config-service:8080
获取配置值
使用 @Value 注解(最常用,Spring Boot/Cloud 项目)
在 Spring Bean 中直接注入,配置变化时会自动更新。
@Component
public class TestBean {
// 从Apollo中获取key为"timeout"的值,默认值为100
@Value("${timeout:100}")
private int timeout;
// 也可以指定namespace
@Value("${myConfig.key:defaultValue}")
private String myConfig;
}
使用 Config API(非Spring或需要手动控制时)
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
public class ApiDemo {
public void getConfig() {
// 获取默认namespace(application)的配置
Config config = ConfigService.getAppConfig();
String key = config.getProperty("your-key", "default-value");
// 监听配置变化
config.addChangeListener(changeEvent -> {
System.out.println("配置发生了变化:" + changeEvent.changedKeys());
});
}
}
配置 Namespace 和 Cluster(可选)
如果你的配置不在默认的 application namespace 中,或者需要指定集群:
XML配置(Spring)
<apollo:config namespaces="application,datasource.yml,my-tasks.xml"/>
Java Config(Spring Boot)
@Configuration
@EnableApolloConfig({"application", "datasource.yml", "FX.apollo"})
public class AppConfig {
}
重要:开启 Apollo 配置监听(自动刷新)
Spring Boot 项目中,你需要确保 @Value 注解的 Bean 能够自动刷新,默认情况下,Apollo 只会刷新使用 @ApolloConfigChangeListener 监听或通过 EnvironmentChangeEvent 重新绑定的 Bean。
最简单的方式是在配置类上添加 @RefreshScope 注解(Spring Cloud 原生支持):
@RestController
@RefreshScope
public class TestController {
@Value("${timeout:100}")
private int timeout;
@GetMapping("/timeout")
public String getTimeout() {
return "Current timeout: " + timeout;
}
}
完整 Spring Boot 集成示例
Application.java
@SpringBootApplication
@EnableApolloConfig // 开启Apollo配置
public class Application {
public static void main(String[] args) {
// 或者通过 System.setProperty 设置
System.setProperty("app.id", "your-app-id");
System.setProperty("apollo.meta", "http://localhost:8080");
SpringApplication.run(Application.class, args);
}
}
常见问题与排查
-
连不上服务器:
- 检查
apollo.meta地址是否正确。 - 检查网络是否通畅,防火墙是否开放 8080/8090 端口。
- 检查环境变量
ENV(如 DEV, FAT, UAT, PRO)是否与 Portal 上应用的配置一致。
- 检查
-
配置未生效:
- 确认
app.id与 Apollo Portal 上的应用 ID 完全一致。 - 检查
namespace是否正确(默认是application,如果是 YAML/XML 格式,需要包含后缀名,如application.yml)。
- 确认
-
自动刷新失效:
- 确认类上有
@RefreshScope注解。 - 或者使用
@ApolloConfigChangeListener手动处理刷新逻辑。
- 确认类上有
服务端部署(快速了解)
客户端可以用了之后,别忘了服务端要跑起来,Apollo 服务端通常由以下组件组成:
- Config Service:提供配置读取、推送功能(客户端直连)。
- Admin Service:提供配置管理、修改功能(Portal 调用)。
- Portal:Web管理界面。
- Eureka:用于服务注册与发现(Apollo 自带的组件)。
- Meta Server:封装了 Eureka 的服务发现逻辑,客户端直接从 Meta Server 获取 Config Service 地址。
快速部署建议:使用 Docker 或官方提供的 scripts/apollo-on-kubernetes 方案,或者参考官方文档手动部署。
集成核心就是三步:加依赖 -> 配 app.id 和 apollo.meta -> 用 @Value 取值,如果遇到问题,优先检查网络连通性和 app.id 是否匹配。