本篇文章为系列文章,未读第一集的同学请猛戳这里: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. 一篇文章解决MongoDB的所有问题

    目录 一.MongoDB相关概念 1.1 业务应用场景 1.1.1 而MongoDB可应对"三高"需求· 1.1.2 什么时候选择MongoDB? 1.1.3 如果用mysql? ...

  2. 一条SQL的执行流程

  3. 【Hadoop离线基础总结】MapReduce参数优化

    MapReduce参数优化 资源相关参数 这些参数都需要在mapred-site.xml中配置 mapreduce.map.memory.mb 一个 MapTask 可使用的资源上限(单位:MB),默 ...

  4. [hdu5521 Meeting]最短路

    题意:有N个点,给定M个集合,集合Si里面的点两两之间的距离都为Ti,集合里面的所有点数之和<=1e6.有两个人分别在1和N处,求1个点使得两个人到这一点距离的最大值最小 思路:这题是裸的最短路 ...

  5. [hdu5448 Marisa’s Cake]多边形面积,公式化简

    题意:给一个凸多边形,求任选若干点形成的多边形的面积和. 思路: 按一定方向(顺时针或逆时针)对多边形的顶点进行编号,则多边形的面积计算公式为:f1 x f2 + f2 x f3 + ... fn-1 ...

  6. 存储过程——公用表表达式(CTE)

    目录 0. 背景说明 1. 定义及语法细节 1.1 基本定义 1.2 基本语法 1.3 多个CTE同时声明 1.4 CTE嵌套使用 2. CTE递归查询 2.1 简介 2.2 准备工作 2.3 计算每 ...

  7. HTTP及Web核心基础

    1. HTTP服务重要基础 1.1 用户访问网站基本流程 (1)客户端从浏览器输入"www.baidu.com"网站地址,回车后,系统首先会查找系统本地的DNS缓存及hosts文件 ...

  8. OGG应用进程abend报错无法insert虚拟列

    环境11.2.0.4 linux6.9 RAC2节点,ogg版本Version 12.2.0.1.160823 OGGCORE_OGGADP.12.2.0.1.0_PLATFORMS_161019.1 ...

  9. sourcetree 拉取 一直让输入密码

    以下方法都没用 在控制台中 git gc git prune git config --global credential.helper store git pull 输入账号密码 git pull ...

  10. HTML中id与name的通俗区别

    转自:https://blog.csdn.net/qq_35038153/article/details/70215356 https://zhidao.baidu.com/question/7582 ...