Spring Cloud 系列之 Apollo 配置中心(一) (4)

注意:填入的用户需要具备对 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 的其它部分

搭建服务端 确保端口未被占用

Quick Start脚本会在本地启动3个服务,分别使用8070, 8080, 8090端口,请确保这3个端口当前没有被使用。

执行启动脚本 ./demo.sh start

Apollo 提供的脚本文件为 .sh 文件,如果你的安装环境是在 Linux 系统下直接运行以上命令即可,如果你想在 Windows 环境下运行该脚本,先安装 Git 然后在 demo.sh 所在目录下鼠标右键点击 Git Bash Here,然后再通过以上命令运行脚本即可。

Spring Cloud 系列之 Apollo 配置中心(一)

当看到如下输出后,就说明启动成功了!

==== starting service ==== Service logging file is ./service/apollo-service.log Started [10768] Waiting for config service startup....... Config service started. You may visit :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 :8070 now! 异常排查

如果启动遇到了异常,可以分别查看 service 和 portal 目录下的 log 文件排查问题。

注:在启动 apollo-configservice 的过程中会在日志中输出 eureka 注册失败的信息,如com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused。需要注意的是,这个是预期的情况,因为 apollo-configservice 需要向 Meta Server(它自己)注册服务,但是因为在启动过程中,自己还没起来,所以会报这个错。后面会进行重试的动作,所以等自己服务起来后就会注册正常了。

访问

访问::8070/ Quick Start 集成了 Spring Security,输入用户名 apollo,密码 admin 后登录。

Spring Cloud 系列之 Apollo 配置中心(一)

登录成功后,首页如下,Apollo 还提供了一个 SampleApp 样本案例供我们学习使用。

Spring Cloud 系列之 Apollo 配置中心(一)

创建项目

点击对应按钮创建项目。

Spring Cloud 系列之 Apollo 配置中心(一)

这里先通过默认的样例部门演示(后面我会讲如何添加部门),AppId 对应客户端配置文件中 app.id。

Spring Cloud 系列之 Apollo 配置中心(一)

创建成功如下图。

Spring Cloud 系列之 Apollo 配置中心(一)

客户端接入服务端

点击链接观看:Apollo 客户端接入服务端视频(获取更多请关注公众号「哈喽沃德先生」)

下面通过最常用、便捷的方式,即基于 Spring Boot 的集成方式来接入服务端。

apollo-demo 聚合工程。Spring Boot 2.2.4.RELEASE

order-service:订单服务,端口 9090

order-service02:订单服务,端口 9091

添加依赖 <!-- https://mvnrepository.com/artifact/com.ctrip.framework.apollo/apollo-client --> <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.6.0</version> </dependency> 配置文件

order-service 和 order-service02 的配置信息除端口外一致。

server: port: 9090 # 端口 spring: application: name: order-service # 应用名称 # apollo 相关配置 app: id: order-service # 与 Apollo 配置中心中的 AppId 一致 apollo: meta: :8080 # Apollo 中的 Eureka 注册中心地址 #cluster: # 指定 Apollo 集群,相同集群实例使用对应集群的配置 #cacheDir: # 配置缓存目录,网络不可用时任然可提供配置服务 bootstrap: enable: true # 启用 apollo env: DEV # 指定环境 # 自定义配置 name: order-service-dev mysql: host: localhost port: 3306 username: root password: root 配置文件实体类

order-service 和 order-service02 的配置文件实体类代码一致。

package com.example.config; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component @Data @NoArgsConstructor @AllArgsConstructor public class ConfigProperties { @Value("${name}") private String name; @Value("${mysql.host}") private String mysqlHost; @Value("${mysql.port}") private Integer mysqlPort; @Value("${mysql.username}") private String mysqlUsername; @Value("${mysql.password}") private String mysqlPassword; } 控制层

order-service 和 order-service02 的控制层代码一致。

package com.example.controller; import com.example.config.ConfigProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Map; @RestController public class ConfigController { @Autowired private ConfigProperties configProperties; @Value("${name}") private String name; @GetMapping("/name") public String getName() { return configProperties.getName(); } @GetMapping("/mysql") public Map<Object, Object> getMySQLProperties() { // JDK9中的新特性,快速创建只读集合。 return Map.of("host", configProperties.getMysqlHost(), "port", configProperties.getMysqlPort(), "username", configProperties.getMysqlUsername(), "password", configProperties.getMysqlPassword()); } } 启动类

启动类需要添加 @EnableApolloConfig 注解。

order-service 和 order-service02 的启动类代码一致。

package com.example; import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableApolloConfig @SpringBootApplication public class OrderServiceApplication { public static void main(String[] args) { SpringApplication.run(OrderServiceApplication.class, args); } } 测试 修改配置信息前

访问::9090/name 和 :9091/name 结果如下:

Spring Cloud 系列之 Apollo 配置中心(一)

Spring Cloud 系列之 Apollo 配置中心(一)

访问::9090/mysql 和 :9091/mysql 结果如下:

Spring Cloud 系列之 Apollo 配置中心(一)

Spring Cloud 系列之 Apollo 配置中心(一)

新增配置信息

进入项目后点击右上角的 新增配置。

Spring Cloud 系列之 Apollo 配置中心(一)

添加配置项 name、mysql.username、mysql.password。

Spring Cloud 系列之 Apollo 配置中心(一)

Spring Cloud 系列之 Apollo 配置中心(一)

Spring Cloud 系列之 Apollo 配置中心(一)

发布配置信息

将刚才添加的配置信息批量发布至应用。

Spring Cloud 系列之 Apollo 配置中心(一)

Spring Cloud 系列之 Apollo 配置中心(一)

Spring Cloud 系列之 Apollo 配置中心(一)

修改配置信息后

控制台打印信息如下:

c.f.a.s.p.AutoUpdateConfigChangeListener : Auto update apollo changed value successfully, new value: order-service-dev-2.0, key: name, beanName: configController, field: com.example.controller.ConfigController.name c.f.a.s.p.AutoUpdateConfigChangeListener : Auto update apollo changed value successfully, new value: root123, key: mysql.password, beanName: configProperties, field: com.example.config.ConfigProperties.mysqlPassword c.f.a.s.p.AutoUpdateConfigChangeListener : Auto update apollo changed value successfully, new value: root123, key: mysql.username, beanName: configProperties, field: com.example.config.ConfigProperties.mysqlUsername

访问::9090/name 和 :9091/name 结果如下:

Spring Cloud 系列之 Apollo 配置中心(一)

Spring Cloud 系列之 Apollo 配置中心(一)

访问::9090/mysql 和 :9091/mysql 结果如下:

Spring Cloud 系列之 Apollo 配置中心(一)

Spring Cloud 系列之 Apollo 配置中心(一)

以上只是 Apollo 的入门教程,后面我们会学习 Apollo 的更多高级玩法,比如多环境部署,高可用环境搭建等等。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyxpx.html