一、准备工作
1.1 Java
- Apollo服务端:1.8+
- Apollo客户端:1.7+
由于Quick Start会在本地同时启动服务端和客户端,所以需要在本地安装Java 1.8+。
在配置好后,可以通过如下命令检查:
java -version
样例输出:
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
1.2 MySQL
- 版本要求:5.6.5+
Apollo的表结构对timestamp
使用了多个default声明,所以需要5.6.5以上版本。
连接上MySQL后,可以通过如下命令检查:
SHOW VARIABLES WHERE Variable_name = 'version'
Variable_name | Value |
---|---|
version | 5.7.11 |
1.3 下载Quick Start安装包
我们准备好了一个Quick Start安装包,大家只需要下载到本地,就可以直接使用,免去了编译、打包过程。
安装包共50M,如果访问github网速不给力的话,可以从百度网盘下载。
- 从Github下载
- checkout或下载apollo-build-scripts项目
- 由于Quick Start项目比较大,所以放在了另外的repository,请注意项目地址
- 从百度网盘下载
- 通过网盘链接下载
- 下载到本地后,在本地解压apollo-quick-start.zip
- 为啥安装包要50M这么大?
- 因为这是一个可以自启动的jar包,里面包含了所有依赖jar包以及一个内置的tomcat容器
二、安装步骤
2.1 创建数据库
Apollo服务端共需要两个数据库:ApolloPortalDB
和ApolloConfigDB
,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。
注意:如果你本地已经创建过Apollo数据库,请注意备份数据。我们准备的sql文件会清空Apollo相关的表。
2.1.1 创建ApolloPortalDB
通过各种MySQL客户端导入sql/apolloportaldb.sql即可。
下面以MySQL原生客户端为例:
source /your_local_path/sql/apolloportaldb.sql
导入成功后,可以通过执行以下sql语句来验证:
select `Id`, `AppId`, `Name` from ApolloPortalDB.App;
Id | AppId | Name |
---|---|---|
1 | SampleApp | Sample App |
2.1.2 创建ApolloConfigDB
通过各种MySQL客户端导入sql/apolloconfigdb.sql即可。
下面以MySQL原生客户端为例:
source /your_local_path/sql/apolloconfigdb.sql
导入成功后,可以通过执行以下sql语句来验证:
select `NamespaceId`, `Key`, `Value`, `Comment` from ApolloConfigDB.Item;
NamespaceId | Key | Value | Comment |
---|---|---|---|
1 | timeout | 100 | sample timeout配置 |
2.2 配置数据库连接信息
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=密码(如果没有密码,留空即可)
注意:不要修改demo.sh的其它部分
三、启动Apollo配置中心
3.1 确保端口未被占用
Quick Start脚本会在本地启动3个服务,分别使用8070, 8080, 8090端口,请确保这3个端口当前没有被使用。
例如,在Linux/Mac下,可以通过如下命令检查:
lsof -i:8080
3.2 执行启动脚本
./demo.sh start
当看到如下输出后,就说明启动成功了!
==== starting service ====
Service logging file is ./service/apollo-service.log
Started [10768]
Waiting for config service startup.......
Config service started. You may visit http://localhost:8080 for service status now!
Waiting for admin service startup....
Admin service started
==== starting portal ====
Portal logging file is ./portal/apollo-portal.log
Started [10846]
Waiting for portal startup......
Portal started. You can visit http://localhost:8070 now!
3.3 异常排查
如果启动遇到了异常,可以分别查看service和portal目录下的log文件排查问题。
注:在启动apollo-configservice的过程中会在日志中输出eureka注册失败的信息,如
com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused
。需要注意的是,这个是预期的情况,因为apollo-configservice需要向Meta Server(它自己)注册服务,但是因为在启动过程中,自己还没起来,所以会报这个错。后面会进行重试的动作,所以等自己服务起来后就会注册正常了。
这里是直接使用的阿波罗已经打好的快速启动的jar包,如果想自己拉取配置的话请参考
https://blog.csdn.net/z960339491/article/details/80667559
下面我将讲一下,应用是如何接入apollo的
首先是新建一个springboot应用 然后加入maven依赖
<!--apollo-->
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.1.0</version>
</dependency>
<!--apollo-->
之后就是在application.properties中进行配置
server.port= your-port
#你在apollo的应用ID
app.id= your-appId
#连接apollo的配置
apollo.meta = http://localhost:8080
# 主动拉取配置时间间隔,单位分钟
apollo.refreshInterval: 1
# will inject 'application' namespace in bootstrap phase
apollo.bootstrap.enabled = true
# will inject 'application' and 'FX.apollo' namespaces in bootstrap phase
apollo.bootstrap.namespaces = application,FX.apollo
# put apollo initialization before logging system initialization
apollo.bootstrap.eagerLoad.enabled=true
这样之后就可以了,基本的配置文件都会自动去找了
但是有时候我们代码中需要用到配置文件中的一些value就需要做些操作了
新建一个配置类
package com.example.myapolloclient.config;
import org.springframework.beans.factory.annotation.Value;
/**
* @Author:
* @Date: 2019/1/15 16:07
* @Description:
*/
public class TestJavaConfigBean {
@Value("${timeout:1000}")
private int timeout;
private int batch;
private String myname;
@Value("${batch:2000}")
public void setBatch(int batch) {
this.batch = batch;
}
public int getTimeout() {
return timeout;
}
public int getBatch() {
return batch;
}
public String getMyname() {
return myname;
}
@Value("${myname:null}")
public void setMyname(String myname) {
this.myname = myname;
}
}
package com.example.myapolloclient.config;
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.model.ConfigChange;
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfig;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import lombok.ToString;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
/**
* @Author:
* @Date: 2019/1/15 15:19
* @Description:
*/
/**
*
* 使用@EnableApolloConfig自动注入
*/
@Configuration
@EnableApolloConfig
public class JavaConfigSample {
@Bean
public TestJavaConfigBean javaConfigBean() {
return new TestJavaConfigBean();
}
}
然后再到controller中调用
就这样你就可以看到自己的配置信息实时的更新了
此外如果想知道更多的配置方式可以到apollo官网查看https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97#3213-spring-boot%E9%9B%86%E6%88%90%E6%96%B9%E5%BC%8F%E6%8E%A8%E8%8D%90