环境准备
JDK 1.8+
MYSQL 5.6.5+
下载
demo github地址:https://github.com/nobodyiam/apollo-build-scripts
demo 下载地址:百度云盘
安装配置
rz上传到centos
unzip apollo-quick-start-1.5.0.zip
解压后目录
初始化数据库
Apollo一共需要两个数据库:ApolloPortalDB 和 ApolloConfigDB,在解压目录的~/sql下
修改数据库连接
数据库连接信息在 demo.sh 中
# apollo config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=
# apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=
启动
执行启动脚本:
./demo.sh start
apollo启动分别使用 8070、8080、8090 端口,请确保这3个端口当前没有被使用
访问
http://IP:8070
账号:apollo
密码:admin
SpringBoot连接Apollo
由之前我们项目的配置在项目classpath下的.yml或.properties中,现在改为在apollo读取
上面我们已经运行起来apollo的demo,已经有一个默认的项目“SampleApp”,该项目已经有一个配置参数timeout,我们就去用java读这个配置
2个基本配置
java连接apollo至少需要配置2个参数
AppId
AppId是应用的身份信息,是从服务端获取配置的一个重要信息,也就是我们需要从apollo那个项目中获取,该ID在创建apollo创建项目的时候设置,默认的项目“SampleApp”为:SampleApp
点击修改图标,进入修改页面就可以看到
meta server
Apollo支持应用在不同的环境有不同的配置,所以需要在运行提供给Apollo客户端当前环境的Apollo Meta Server信息,默认情况下,meta server和config service是部署在同一个JVM进程,所以meta server的地址就是config service的地址
这里也就是我们上面centos的地址
创建项目
pom.xml添加apollo依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <repositories> <repository> <id>nexus-aliyun</id> <name>Nexus aliyun</name> <layout>default</layout> <url>http://maven.aliyun.com/nexus/content/groups/public</url> <snapshots> <enabled>false</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </repository> </repositories> <dependencies> <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.5.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.properties
#AppId app.id=SampleApp #meta server apollo.meta=http://192.168.109.128:8080 #配置本地缓存地址,apollo服务不可用是,从缓存中读取 apollo.cacheDir=D:/apollo/cacheDir
DemoApplication.java启动类新增注解
@SpringBootApplication @EnableApolloConfig public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
DemoController.java
@RestController public class DemoController { /** * 获取timeout * @return */ @GetMapping(name="/get") public String get(){ Config config = ConfigService.getAppConfig(); String timeout = config.getProperty("timeout",""); return "timeout:" + timeout; } }
浏览器请求
在apollo中修改timeout值,提交、发布,可以请求/get发现timeout已经改成在apollo中的值