Spring Cloud 系列之 Apollo 配置中心(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Apollo 配置中心(一)
本篇文章讲解 Apollo 部门管理、用户管理、配置管理、集群管理。
点击链接观看:Apollo 部门管理、用户管理、配置管理、集群管理视频(获取更多请关注公众号「哈喽沃德先生」)
部门及用户管理
接下来我们深入学习一下 Apollo 控制台的使用,刚才我们是通过样例部门和 Apollo 用户来操作的,可以自定义部门和用户吗?答案当然是可以的。下面我们就讲一下如何自定义部门和用户,如何给项目指定用户并分配权限以及删除应用。
应用配置
点击管理员工具
下的系统参数
菜单进入应用配置
页面。
在应用配置
页面通过organizations
关键字查询部门信息,下图为默认信息。
在value
一栏中添加自定义部门信息,点击保存,无特殊说明则修改完一分钟实时生效。
此时再去创建项目时,就可以选择我们刚才添加的部门了。
用户管理
点击管理员工具
下的用户管理
菜单进入用户管理页面。
填写用户信息,点击提交,无特殊说明则修改完一分钟实时生效。
此时再去创建项目时,就可以选择我们刚才添加的用户了。如下图,我们给 product-service
项目分配了负责人 zhangsan
,如果使用zhangsan
登录的话,则只能看到他自己负责的项目。而 apollo
用户是超级管理员所以可以看到所有项目。
权限分配
进入项目后点击右上角的授权
按钮,进入权限管理
页面。
可以给指定用户添加对该应用的修改权
和发布权
,比如 order-service 是 apollo 创建的,但是我授权给了 zhangsan,zhangsan 再登录时也就可以操作这个项目了。
删除应用(项目)
点击管理员工具
下的删除应用、集群、AppNamespace
菜单进入对应页面。
在删除应用
栏目中的 AppId
处填写应用 id 先进行查询,查询到应用后点击删除应用
即可。
配置管理
这一小节我们通过大量配图演示如何增改删配置信息,以及如何添加 Namespace。
添加配置
进入项目后点击右上角的 新增配置
。
添加配置项信息,点击提交即可,刚添加的配置信息处于未发布状态。
修改配置
点击对应配置项的修改按钮。
修改配置信息,也可填写修改说明,点击提交即可,更新后的信息如需生效要重新发布。
回滚
回滚代表恢复至上一次的发布状态,比如刚刚发布的值是 order-service-2.0,回滚以后会恢复至上一次发布的 order-service。
删除配置
点击对应配置项的删除按钮。
删除配置信息后如需生效要重新发布。
添加 Namespace
如果配置项过多的情况下,可以通过 Namespace 来进行管理,Namespace 就相当于一份配置文件。
进入项目后点击左下角添加Namespace
。
选择创建Namespace
,类型这里需要说明一下:
-
public:公共配置,其他应用也可以使用;
-
private:私有配置,仅限本应用使用。
可以通过文本
的方式添加多个配置项。
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=1234
测试
客户端配置文件信息如下:
server: port: 9090 # 端口 spring: application: name: order-service # 应用名称 # apollo 相关配置 app: id: order-service # 与 Apollo 配置中心中的 AppId 一致 apollo: meta: http://localhost:8080 # Apollo 中的 Eureka 注册中心地址 #cluster: # 指定 Apollo 集群,默认为 default,相同集群实例使用对应集群的配置 #cacheDir: # 配置缓存目录,网络不可用时任然可提供配置服务 bootstrap: enable: true # 启用 apollo env: DEV # 指定环境
注解方式
在启动类或配置类中添加 @EnableApolloConfig({"application", "application-mysql"})
注解并指定 Namespace,就可以直接使用 Spring 的 @Value
注解来获取配置信息,${}
中对应 Apollo 中的 key,:
后跟默认值。
@Value("${spring.datasource.driver-class-name:}") private String driverClassName; @Value("${spring.datasource.url:}") private String url; @Value("${spring.datasource.username:root}") private String username; @Value("${spring.datasource.password:root}") private String password; @GetMapping("/datasourceByAnnotation") public Map<Object, Object> getDatasourceByAnnotation() { // JDK9中的新特性,快速创建只读集合。 return Map.of("driverClassName", driverClassName, "url", url, "username", username, "password", password); }
访问:http://localhost:9090/datasourceByAnnotation 结果如下:
API方式
我们可以通过以下代码读取 Apollo 中的配置信息。
@GetMapping("/datasource") public Map<Object, Object> getDatasource() { //ConfigService.getAppConfig(); // 读取默认 Namespace // 读取指定 Namespace Config config = ConfigService.getConfig("application-mysql"); // 获取配置信息,第一个参数为配置项的 key,第二个参数为默认值(读取不到配置就会使用默认值,建议都加上默认值) String driverClassName = config.getProperty("spring.datasource.driver-class-name", null); String url = config.getProperty("spring.datasource.url", null); String username = config.getProperty("spring.datasource.username", null); String password = config.getProperty("spring.datasource.password", null); // JDK9中的新特性,快速创建只读集合。 return Map.of("driverClassName", driverClassName, "url", url, "username", username, "password", password); }
访问:http://localhost:9090/datasource 结果如下:
公共配置
刚才添加 Namespace 时我们选择的是 private 私有配置,仅限本项目使用,如果有一些配置我们所有项目都需要使用,可以通过公共配置实现。
添加公共配置
比如我们先创建一个公共项目 common-service
。
然后创建公共的 Namespace。
添加配置信息提交并发布。
值得注意的是,公共配置信息是哪个项目创建的才拥有修改和删除的权力,其他项目只能选择关联和覆盖。
关联公共配置
让 order-service
项目关联 common-service
的公共配置信息。
进入项目后点击左下角添加Namespace
,选择关联公共Namespace,添加刚才创建的公共Namespace。
关联成功以后在项目首页可以看到关联的配置信息,且只能选择覆盖此配置,不能删除和修改配置信息(可以删除Namespace)。或者直接在私有配置下配置同名的配置项,同名的私有配置会比公共配置优先级高。
测试
在启动类或配置类中添加 @EnableApolloConfig({"application", "application-mysql", "microservice.application-common"})
注解并指定 Namespace,就可以直接使用 Spring 的 @Value
注解来获取配置信息,${}
中对应 Apollo 中的 key,:
后跟默认值。
@Value("${commonName:}") private String commonName; @GetMapping("/commonByAnnotation") public Map<Object, Object> getCommonByAnnotation() { return Map.of("commonName", commonName); }
访问:http://localhost:9090/commonByAnnotation 结果如下:
我们可以通过以下的方式读取 Apollo 中的配置信息。
@GetMapping("/common") public Map<Object, Object> getCommon() { //ConfigService.getAppConfig(); // 读取默认 Namespace // 读取指定 Namespace Config config = ConfigService.getConfig("microservice.application-common"); // 获取配置信息,第一个参数为配置项的 key,第二个参数为默认值(读取不到配置就会使用默认值,建议都加上默认值) String commonName = config.getProperty("commonName", null); return Map.of("commonName", commonName); }
访问:http://localhost:9090/common 结果如下:
集群管理
在有些特殊情况下,比如部署在 A 机房的应用连接的 MySQL 服务器地址和部署在 B 机房的应用连接的 MySQL 服务器地址不一样。在这种情况下,可以通过在 Apollo 创建不同的集群来解决。
添加集群
进入项目后点击左下角添加集群
,比如添加 SHAOY(欧阳数据中心)。
同步配置
集群其实就是另一个环境而已,所有的操作和前面讲的都一样,这里就不再赘述。有一点需要说明一下,就是同步配置功能。
假设 SHAOY 这个集群的配置信息和默认集群的配置信息只有个别地方不一致,大部分都是一致的,我们挨个添加岂不是很浪费时间?
可以看到在 SHAOY 这个集群下的 application-mysql 的 Namespace 中是没有任何配置项的。不急,Apollo 给我们提供了一个同步配置的功能。通过同步配置功能,可以使多个环境、集群间的配置保持一致,需要注意的是,同步完之后需要发布后才会对应用生效。
既然是将默认集群环境的配置同步至 SHAOY 环境中,那就在默认环境中选择需要同步的 Namespace,点击同步配置按钮。
勾选需要同步的配置,选择要同步到哪个集群,然后点击下一步。
点击同步按钮以后配置将同步成功,同步完之后需要发布后才会对应用生效。
数据已经同步过来了,我们根据需求修改了服务器地址为 192.168.10.101,然后发布配置。
测试
配置文件中通过 apollo.cluster
指定集群名称。
server: port: 9090 # 端口 spring: application: name: order-service # 应用名称 # apollo 相关配置 app: id: order-service # 与 Apollo 配置中心中的 AppId 一致 apollo: meta: http://localhost:8080 # Apollo 中的 Eureka 注册中心地址 cluster: SHAOY # 指定 Apollo 集群,默认为 default,相同集群实例使用对应集群的配置 #cacheDir: # 配置缓存目录,网络不可用时任然可提供配置服务 bootstrap: enable: true # 启用 apollo env: DEV # 指定环境 # 自定义配置 name: order-service-dev mysql: host: localhost port: 3306 username: root password: root
之前的代码无需做任何改变,访问:http://localhost:9090/datasourceByAnnotation 结果如下:
下一篇我们讲解 Apollo 多环境部署方案,教大家搭建除了 DEV 的其他环境,记得关注噢~
本文采用 知识共享「署名-非商业性使用-禁止演绎 4.0 国际」许可协议
。
大家可以通过 分类
查看更多关于 Spring Cloud
的文章。
🤗 您的点赞
和转发
是对我最大的支持。
扫码关注 哈喽沃德先生
「文档 + 视频」每篇文章都配有专门视频讲解,学习更轻松噢 ~
原文地址:https://www.cnblogs.com/mrhelloworld/p/apollo2.html
相关推荐
-
SpringCloud微服务架构升级总结 Java框架
2020-6-1
-
java 使用spring实现读写分离 Java框架
2019-3-25
-
Spring Cloud 系列之 Gateway 服务网关(三) Java框架
2020-6-11
-
Ajax文件异步上传,Html5实现 Java框架
2019-2-24
-
设计模式之观察者模式,事件机制的底层原理 Java框架
2019-8-15
-
SQL语句性能优化 Java框架
2019-6-10
-
SpringBoot开发案例Nacos配置管理中心 Java框架
2019-9-3
-
SpringBoot源码:启动过程分析(一) Java框架
2020-6-1
-
Dubbo 源码分析 – SPI 机制 Java框架
2019-3-22
-
SpringCloud系列之服务注册发现(Eureka)应用篇 Java框架
2020-6-11