本篇文章为系列文章,未读第一集的同学请猛戳这里: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 的文章。

Spring Cloud 系列之 Apollo 配置中心(二)的更多相关文章

  1. Spring Cloud 系列之 Apollo 配置中心(三)

    本篇文章为系列文章,未读前几集的同学请猛戳这里: Spring Cloud 系列之 Apollo 配置中心(一) Spring Cloud 系列之 Apollo 配置中心(二) 本篇文章讲解 Apol ...

  2. Spring Cloud 系列之 Apollo 配置中心(四)

    本篇文章为系列文章,未读前几集的同学请猛戳这里: Spring Cloud 系列之 Apollo 配置中心(一) Spring Cloud 系列之 Apollo 配置中心(二) Spring Clou ...

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

    背景 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关.参数的配置.服务器的地址等等. 对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环境.分集群管理配置,完善的权限.审核机 ...

  4. Spring Cloud 系列之 Config 配置中心(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Config 配置中心(一) 本篇文章讲解 Config 如何实现配置中心自动刷新. 配置中心自动刷新 点击链接观看: ...

  5. Spring Cloud 系列之 Config 配置中心(三)

    本篇文章为系列文章,未读前几集的同学请猛戳这里: Spring Cloud 系列之 Config 配置中心(一) Spring Cloud 系列之 Config 配置中心(二) 本篇文章讲解 Conf ...

  6. Spring Cloud 系列之 Consul 配置中心

    前面我们已经学习过 Spring Cloud Config 了: Spring Cloud 系列之 Config 配置中心(一) Spring Cloud 系列之 Config 配置中心(二) Spr ...

  7. Spring Cloud 系列之 Config 配置中心(一)

    服务配置现状 配置文件是我们再熟悉不过的,在微服务系统中,每个微服务不仅仅只有代码,还需要连接其他资源,例如数据库的配置或功能性的开关 MySQL.Redis .Security 等相关的配置.除了项 ...

  8. Spring Cloud 系列之 Consul 注册中心(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Consul 注册中心(一) 本篇文章讲解 Consul 集群环境的搭建. Consul 集群 上图是一个简单的 Co ...

  9. 【Spring Cloud】Spring Cloud Config 实现分布式配置中心

    Spring Cloud Config 实现分布式配置中心 一.分布式配置中心 分布式系统中,往往拥有大量的服务应用,而每个应用程序都需要有对应的配置文件来协助完成服务环境初始化.运行.因此生产了大量 ...

随机推荐

  1. Java 常用API(二)

    目录 Java 常用API(二) 1. Object类 2. Date类 概述 构造方法和成员方法 3. DateFormat类 概述 SimpleDateFormat类 练习 4. Calendar ...

  2. STM32CubeMX 多通道 ADC DMA 配置 测试小程序

    要点: 1.STM32F103C8T6单片机 2.ADC+DMA 多通道 重点是ADC+DMA配置,ADC+DMA配置如下 其他配置略略略略. 然后各位自行直看.ioc文件,生成代码后在while之前 ...

  3. Coursera课程笔记----Write Professional Emails in English----Week 2

    Let's Start Writing (Week 2) Write Effective Subject Lines be BRIEF 50 characters or less = 5-7 word ...

  4. Android 8.1 关机充电动画(三)Android模式

    system:Android 8.1 platform:RK3326/PX30 uboot kernel system/core/healthd Android 8.1 关机充电动画(一)模式选择 A ...

  5. Excel函数有门槛,是编程

    Excel的公式体系,最简单的就是输入“=1+1”.“=2*3”.看起来没有门槛,但实质上是函数式编程,Range写Formula,Power Query写M语言,VBA里写Function.通过菜单 ...

  6. 3D三栅极晶体管(摘抄)

    英特尔的科学家们在2002年发明了三栅极晶体管——这是根据栅极有三面而取名的. 传统“扁平的”2D平面栅极被超级纤薄的.从硅基体垂直竖起的3D硅鳍状物所代替.电流控制是通过在鳍状物三面的每一面安装一个 ...

  7. Python 简明教程 --- 1,搭建Python 环境

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 人生苦短,我用Python. -- 龟叔T恤 Python 是一门解释型语言,所以要想运行Pytho ...

  8. angular js 分页

    一.编写实体类PageResult public class PageResult implements Serializable { private Long total;//总记录数 privat ...

  9. Java并发II

    Java并发 J.U.C图 一.线程的安全性 当多个线程访问某个类的时候,不管运行环境采用何种方式调度或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或者协同,这个类都可以表现出正确的行 ...

  10. Python中内置函数

    python提供了很多的内置函数,这些内置的函数在某些情况下,可以起到很大的作用,而不需要专门去 写函数实现XX功能,直接使用内置函数就可以实现,下面分别来学习内置函数的使用和案例代码. abs(), ...