本篇文章為系列文章,未讀第一集的同學請猛戳這里: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
的文章。
🤗 您的點贊
和轉發
是對我最大的支持。
📢 掃碼關注 哈嘍沃德先生
「文檔 + 視頻」每篇文章都配有專門視頻講解,學習更輕松噢 ~

