Apollo简介:
Apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
Apollo支持4个维度管理Key-Value格式的配置:
1.application (应用)
2.environment (环境)
3.cluster (集群)
4.namespace (命名空间)
同时,Apollo基于开源模式开发,开源地址:https://github.com/ctripcorp/apollo
Apollo下载:
方式一:
clone源码:git clone https://github.com/ctripcorp/apollo
方式二:
下载安装包:https://github.com/ctripcorp/apollo/releases
创建数据库:
数据库版本要求:5.6.5+;
查看数据库版本:
SHOW VARIABLES WHERE Variable_name = 'version';
Apollo源码中自带sql脚本:
ApolloConfigDB 所在目录:\apollo\scripts\db\migration\configdb
ApolloPortalDB 所在目录:\apollo\scripts\db\migration\portaldb
创建以上2个数据库并初始化;
Apollo配置修改:
找到 scripts/build.bat文件,修改数据库密码(默认为空):
rem apollo config db info
set apollo_config_db_url="jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8"
set apollo_config_db_username="root"
set apollo_config_db_password=""
rem apollo portal db info
set apollo_portal_db_url="jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8"
set apollo_portal_db_username="root"
set apollo_portal_db_password=""
打包运行:
修改完上面的配置信息后,双击scripts/build.bat进行批量打包(等同于maven的package)
打完包以后依次启动:apollo-configservice(配置服务)、apollo-adminservice(客户端服务)、apollo-portal(Apollo UI界面)
java -jar apollo-configservice-2.0.0-SNAPSHOT.jar
java -jar apollo-adminservice-2.0.0-SNAPSHOT.jar
java -jar apollo-portal-2.0.0-SNAPSHOT.jar
启动成功后访问:
http://localhost:8090/ admin客户端
http://localhost:8080/ 如果出现eureka 的管理界面,说明服务启动正常。
Apollo UI 界面:http://localhost:8070/
用户名/密码:apollo/admin; 在这里边配置namespace和property
SpringBoot整合Apollo:
引入依赖:
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.9.0</version>
</dependency>
配置文件:
application.properties
app.id=12345 #对应的Apollo中配置的appid
apollo.cluster=default #对应的Apollo中的那套集群环境
apollo.meta=http://localhost:8080 #对应的Apollo Config 地址
Demo:
@SpringBootApplication
@Slf4j
@EnableApolloConfig //启动apollo配置注解
public class SpringBootStart {
@ApolloConfig("appnamespace") //指定具体的namespace
private static Config configSwitch;
public static void main(String[] args) {
SpringApplication.run(SpringBootStart.class, args);
log.info("======启动=======");
//获取方式一
Config appConfig = ConfigService.getAppConfig(); //默认的namespace是application
String password = appConfig.getProperty("password", "");
log.info("{}==:" + password, "密码");
//获取方式二 直接指定namespace
Config appnamespace = ConfigService.getConfig("appnamespace");
String unionpayflag1 = appnamespace.getProperty("unionpayflag", "");
log.info("{}==:" + unionpayflag1, "开关1");
//获取方式三
String unionpayflag = getPassword("unionpayflag", "开关");
log.info("{}==:" + unionpayflag, "开关2");
}
public static String getPassword(String key, String param){
//获取指定namespace下的key对应的值value
String property = configSwitch.getProperty(key, "");
//为空默认值
if (!StringUtils.hasLength(property)){
property = "0";
}
// log.info("{}====:" + property, param);
return property;
}
}
======启动=======
密码==:123456
开关1==:1
开关2==:1
到此简单的Quick Start就结束了,总得来说,Apollo还是挺方便易用的,并且参数还可以实时生效(用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序
)。除此之外,Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。
具体可参考官方文档:
https://www.apolloconfig.com/#/zh/design/apollo-introduction