项目中配置文件比较繁杂,而且不同环境的不同配置修改相对频繁,每次发布都需要对应修改配置,如果配置出现错误,需要重新打包发布,时间成本较高,因此需要做统一的分布式注册中心,能做到自动更新配置文件信息,解决以上问题
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
参阅 Gihub官方地址
用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序。
提供开放平台API
Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。
注意:如果你本地已经创建过Apollo数据库,请注意备份数据。我们准备的sql文件会清空Apollo相关的表。
配置数据库连接信息
Apollo服务端需要知道如何连接到你前面创建的数据库,所以需要编辑demo.sh,修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息。
注意:填入的用户需要具备对ApolloPortalDB和ApolloConfigDB数据的读写权限
#apollo config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=用户名
apollo_config_db_password=密码(如果没有密码,留空即可)
# apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=用户名
apollo_portal_db_password=密码(如果没有密码,留空即可)
Quick Start脚本会在本地启动3个服务,分别使用8070, 8080, 8090端口,请确保这3个端口当前没有被使用。
例如,在Linux/Mac下,可以通过如下命令检查:
./demo.sh start
当看到如下输出后,就说明启动成功了!
访问网址:打开http://localhost:8070
输入用户名apollo,密码admin后登录
外网是没有的,需要从git下载下来已下载将apollo-master 打入到本地Maven仓库中
org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE
UTF-8
UTF-8
1.8
Finchley.RC1
org.springframework.boot
spring-boot-starter
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-web
com.ctrip.framework.apollo
apollo-client
1.0.0
com.ctrip.framework.apollo
apollo-core
1.0.0
org.projectlombok
lombok
true
com.alibaba
fastjson
1.2.3
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
org.apache.maven.plugins
maven-compiler-plugin
1.8
org.apache.maven.plugins
maven-resources-plugin
3.0.1
copy-conf
package
copy-resources
UTF-8
${project.build.directory}/ext/conf
ext/conf
logback.xml
true
org.jacoco
jacoco-maven-plugin
0.7.5.201505241946
default-prepare-agent
prepare-agent
default-prepare-agent-integration
prepare-agent-integration
com.spotify
docker-maven-plugin
0.4.3
hy_uav_gateway
src/main/docker
/
${project.build.directory}
${project.build.finalName}.jar
ext/conf/logback.xml
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false
server:
port: 8001
spring:
application:
name: itmayiedu_a
eureka:
client:
service-url:
defaultZone: http://192.168.212.162:8080/eureka
修改/opt/settings/server.properties(Mac/Linux)或C:\opt\settings\server.properties(Windows)文件,设置env为DEV:
env=DEV
apollo-env.properties
local.meta=http://192.168.212.162:8080
dev.meta=http://192.168.212.162:8080
fat.meta=${fat_meta}
uat.meta=${uat_meta}
lpt.meta=${lpt_meta}
pro.meta=${pro_meta}
在META-INF文件夹创建app.properties 指定appid
app.id=appid_0064
@Configuration
@EnableApolloConfig
@SpringBootApplication
@EnableAutoConfiguration
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
使用以下方法可以监听配置文件是否被修改
@Component
public class TestJavaConfigBean {
// config change listener for namespace application
@ApolloConfigChangeListener("application")
private void anotherOnChange(ConfigChangeEvent changeEvent) {
ConfigChange change = changeEvent.getChange("zhangsan_conf");
System.out.println(String.format("Found change - key: %s, oldValue: %s," + "newValue: %s, changeType: %s",
change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType()));
}
}
[GitHub官方参考地址](https://github.com/ctripcorp/apollo/wiki/Apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E8%AE%BE%E8%AE%A1)