1. 簡介
在本教程中,我們將深入瞭解 Apollo 配置系統。我們將瞭解它的作用,學習如何使用它來管理配置設置,以及如何從應用程序中消費這些設置。
2. 什麼是 Apollo?
Apollo 是一個免費、開源的配置管理系統,最初出自攜程框架研發部門。它允許我們從一箇中心界面管理多個應用程序在多個集羣中的配置設置。Apollo 還維護配置版本,因此我們可以追蹤它們隨時間的變化。
Apollo 還提供了一套豐富的 SDK,方便我們在應用程序中消費配置。這使得我們的應用程序能夠實時獲取配置更改,而無需重新安裝或重啓。
3. 運行 Apollo
現在我們知道 Apollo 的用途,就需要能夠運行它。 Apollo 需要 Java 1.8 或更高版本的 JVM,並且可以使用 MySQL 數據庫來存儲其數據。 但是,它還提供了一個快速啓動模式,我們可以使用它。
我們可以從 Apollo 快速啓動倉庫 下載 apollo-all-in-one.jar。 這是一個 Spring Boot 應用,我們可以像任何其他應用一樣運行它。
在運行它之前,我們需要創建一個 application.properties 文件,以告訴它將日誌文件放在哪裏:
logging.file.name: ./logs/apollo.log否則,日誌將被寫入到 /opt/logs,您可能沒有寫入權限。
然後我們準備好開始運行。在運行期間,我們需要指定一些 Spring 配置文件,以指示在啓動應用程序時要運行的組件:
$ SPRING_PROFILES_ACTIVE="github,database-discovery,auth" java -jar apollo-all-in-one.jar
2025-09-20 09:28:52.972 INFO --- [ main] c.c.f.apollo.assembly.ApolloApplication [starting:common] : commonContext starting...
_ _ _
/ \ _ __ ___ | | | ___
/ _ \ | '_ \ / _ \| | |/ _ \
/ ___ \| |_) | (_) | | | (_) |
/_/ \_\ .__/ \___/|_|_|\___/
|_|
:: Spring Boot :: (v2.7.11)
.....
2025-09-20 09:29:14.912 INFO 43923 --- [nio-8090-exec-1] o.a.c.c.C.[Tomcat-1].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2025-09-20 09:29:14.913 INFO 43923 --- [nio-8090-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2025-09-20 09:29:14.916 INFO 43923 --- [nio-8090-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 3 ms默認情況下,這將啓動一個內存中的 H2 數據庫,這意味着我們的數據在重啓後會丟失。我們還支持基於文件的 H2 數據庫或 MySQL 數據庫,以滿足需求。
應用程序啓動後,我們準備好登錄並開始使用它。默認情況下,我們可以通過 http://localhost:8070 訪問管理 UI:
我們可以使用默認憑據登錄,即 apollo 和 admin:
此時,我們擁有一個可用的系統,可以管理我們的配置設置。
由於我們正在運行快速啓動設置,因此它包含一些示例數據。 儘管可以自定義所有這些內容,但這些內容超出了本文檔的範圍。
4. 配置管理
現在我們已經擁有一個可運行的系統,可以開始在其中配置我們的應用程序。
Apollo 控制所有配置設置,涵蓋四個主要領域:
- 項目: 這代表配置的應用本身。
- 環境: 這代表應用程序部署的環境。每個 Apollo 實例管理一個單獨的環境,儘管管理 UI 可以跨多個環境工作。
- 集羣: 這代表同一環境中服務實例的一個組。這允許我們使用不同的配置運行相同應用程序的不同實例——例如,不同數據中心。
- 命名空間: 這代表同一項目的配置設置組。
在管理和加載配置時,我們將處理所有這些組合的適當組合,從而為我們的應用程序提供所有可能的組合。
4.1. 項目
我們需要處理的第一個區域是“項目”。這代表一個應用程序,但與應用程序運行的任何上下文無關。
使用主儀表盤上的“創建項目”按鈕創建項目。
為了創建新項目,我們需要填寫一些值。其中一些 – “部門”、“應用所有者”和“應用管理員” – 與我們的快速啓動安裝自帶的數據相關,因此我們現在可以簡單地選擇現有的值。
“應用 ID”字段是我們訪問配置所需要的標識符,而“應用名稱”是我們創建後在 UI 中看到的友好名稱。
創建新項目後,我們會看到項目儀表板:
從這裏,我們可以管理我們的應用程序。
4.2. 集羣 (Clusters)
集羣代表同一應用程序的不同已部署實例,構成一個整體。例如,我們可能擁有代表應用程序可以部署到的不同數據中心的多個集羣。
對於許多應用程序,我們可能只需要一個集羣。事實上,當我們創建新項目時,我們會獲得一個名為“default”的單個集羣。但是,如果我們需要更多集羣,我們可以從這裏使用“添加集羣”按鈕添加它們:
當我們創建新的集羣時,需要為其指定一個唯一的名稱,並選擇集羣所在的環境集。並非所有集羣都需要存在於所有環境中——我們的 Dev 環境可能只使用一個數據中心,而 Production 環境可能使用多個。請注意,我們的快速啓動實例代表一個單一的 LOCAL 環境。
創建後,我們可以從項目儀表板中選擇要使用的集羣:
這將隨後更改我們管理配置集。
4.3 命名空間 (Namespaces)
命名空間代表一個應用程序的配置設置集合。它們與集羣 (Clusters) 概念不同,但都位於同一個項目 (Project) 中。因此,每個命名空間都存在於跨所有集羣和所有環境的每個集羣中。然而,每個集羣內的配置設置是不同的。我們可以利用它們,如果我們在同一個應用程序實例中需要不同的、獨立的配置集。
與集羣一樣,我們通常只需要為我們的應用程序創建一個命名空間,並且項目會自動提供一個名為“application”的默認命名空間。但是,如果需要更多,我們可以使用“添加命名空間”按鈕創建它們:
要創建一個新的命名空間,我們只需要指定其名稱。私有命名空間是特定於單個項目的,而公共命名空間可以共享到多個項目。我們還可以指定配置設置加載的格式,儘管屬性文件 (properties files) 在這裏通常是最有用的。
創建命名空間後,我們可以從項目儀表板 (project dashboard) 中訪問它:
4.4. 配置
我們的項目配置設置存在於集羣和命名空間的多重組合之下。 在管理這些設置時,我們需要確保已選擇正確的集羣,並且正在正確的命名空間部分內工作。
使用“添加配置”按鈕,可以在適當的命名空間中添加新的配置設置:
創建配置時,我們可以選擇其創建的集羣。 但是,一旦創建,這些集羣完全獨立,並且與彼此分開管理。 雖然 Apollo 提供了工具來在集羣之間比較和同步它們,但僅供參考。
創建後,我們的配置設置將出現在我們的集羣中的命名空間部分:
從這裏,我們可以根據需要修改和刪除任何設置。
4.5. 發佈配置
為了使用我們的配置設置,首先需要發佈它們。這代表一個明確的步驟,以避免應用程序使用不完整配置——例如,缺少正確憑據的數據庫 URL。
使用“發佈”按鈕發佈我們的配置設置:
這會顯示我們正在發佈的一組更改,並要求提供一個唯一的發佈名稱——儘管它有合理的默認值。
一旦我們確認無誤,就可以繼續發佈配置設置,此時它們將立即可用供應用程序實例使用。
Apollo 還維護了我們配置設置的歷史記錄,允許我們查看以及何時更改它們,並在需要時回滾到以前的版本。
5. 使用 Spring Boot 消費配置
現在我們能夠管理配置,我們也需要能夠在我們的應用程序中利用它。 Apollo 提供了一個 SDK 庫,我們可以使用它在應用程序中消費我們的配置。
要使用它,我們需要在我們的構建中包含 最新版本,目前是 2.4.0。
如果使用 Maven,可以在我們的 pom.xml 文件中添加以下依賴:
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>2.4.0</version>
</dependency>這個依賴項就像 Spring Boot Starter 一樣,我們已經快完成了。最後的步驟是啓用 Apollo 配置設置。我們通過使用 @EnableApolloConfig 註解來實現:
@SpringBootApplication
@EnableApolloConfig
public class DemoApplication {
}該標註還允許我們指定從哪裏加載配置的命名空間:
@SpringBootApplication
@EnableApolloConfig({"test-namespace"})
public class DemoApplication {
}如果未指定任何值,則默認為應用程序。
此時,我們可以像任何其他配置一樣,引用阿波羅中定義的配置設置:
@Value("${example.setting}")
private String exampleSetting;我們現在只需要告訴 Spring 從哪裏獲取我們的配置。
我們可以通過環境變量或從我們的 application.properties 文件來完成:
apollo.meta: http://localhost:8080
app.id: baeldung-test
apollo.cluster: emea
apollo.meta 屬性指示 Spring 配置設置的位置。app.id 屬性告知它在 Apollo 中的項目 ID。apollo.cluster 屬性告知它在項目中使用的集羣。如果省略此屬性或集羣不存在,則會回退到 default。
當我們現在啓動服務時,我們的屬性將直接從 Apollo 加載。這些將始終是給定項目、集羣和命名空間的最新的發佈配置。Apollo SDK 也會在發佈新版本時自動重新加載配置設置,而無需應用程序重啓。
6. 總結
本文快速介紹了 Apollo 配置管理系統。 實際上,我們還可以利用該系統做更多的事情。 下次您需要管理應用程序的配置時,不妨嘗試一下。