Apollo入門教程(Windows)
阿新 • • 發佈:2018-12-07
簡介
Apollo(阿波羅)是攜程框架部門研發的分散式配置中心,能夠集中化管理應用不同環境、不同叢集的配置,配置修改後能夠實時推送到應用端,並且具備規範的許可權、流程治理等特性,適用於微服務配置管理場景。
本地快速部署
- 下載安裝包https://github.com/nobodyiam/apollo-build-scripts
- 根據根目錄sql資料夾下的指令碼在mysql5.6+資料庫新建ApolloConfigDB和ApolloPortalDB資料庫
- 啟動根目錄下demo.sh檔案
- 訪問http://localhost:8070,輸入使用者名稱/密碼(apollo/admin)登入
Java客戶端接入
- 配置AppId和Apollo Meta Server:在resources\META-INF\目錄下新建app.properties檔案,相應地在apollo控制檯(http://localhost:8070/)中新建專案beidao。
# test
app.id=beidao
apollo.meta=http://localhost:8080
#apollo.autoUpdateInjectedSpringProperties=false
- spring引入apollo的namespace:在resources\META-INF\spring目錄下新建檔案spring-apollo.xml,內容如下,並把此檔案放入spring上下文中載入,相應地在apollo控制檯beidao專案中新建namesapce TEST1.bd和 TEST1.bd1
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:apollo="http://www.ctrip.com/schema/apollo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd"> <!-- 這個是最簡單的配置形式,一般應用用這種形式就可以了,用來指示Apollo注入application namespace的配置到Spring環境中 --> <apollo:config order="1"/> <!-- 這個是稍微複雜一些的配置形式,指示Apollo注入TEST1.bd和TEST2.bd namespace的配置到Spring環境中,其中TEST1.bd優先順序高於TEST1.bd1 --> <apollo:config namespaces="TEST1.bd,TEST1.bd1" order="2"/> <bean class="com.lvba.customer.apollo.controller.ApolloTestBean"> <property name="username" value="${username:xxx}"/> <property name="password" value="${password:xxx}"/> </bean> <context:annotation-config /> </beans>
- 註解:可以用@Value取引入的所有namespace中設定的值,如果有多個namespace存在同一key,則取優先順序最高的namespace中的值,如namespace中均不存在且本地系統引數(系統環境變數設定)中存在此key,則取本地系統引數值。
@Value("${username:xxx}")
String username;
也可以用@ApolloConfig引入單個namespace,所有預設的namespace名稱均為application
@ApolloConfig
private Config config; //inject config for namespace application
此時namespace取值方式如下
config.getProperty("username", "xxx");
- apollo還可以對namespace加監聽器
//config change listener for namespace application
@ApolloConfigChangeListener
private void someOnChange(ConfigChangeEvent changeEvent) {
ConfigChangeListener changeListener = new ConfigChangeListener() {
public void onChange(ConfigChangeEvent changeEvent) {
logger.info("Changes for namespace {}", changeEvent.getNamespace());
for (String key : changeEvent.changedKeys()) {
ConfigChange change = changeEvent.getChange(key);
logger.info("Change - key: {}, oldValue: {}, newValue: {}, changeType: {}",
change.getPropertyName(), change.getOldValue(), change.getNewValue(),
change.getChangeType());
}
}
};
config.addChangeListener(changeListener);
}
- 訪問效果:啟動dubbo service和web工程,訪問頁面http://localhost:8085/apollo/test(可在http://localhost:8070/config.html?#/appid=beidao控制檯修改key對應的value值,再重新整理此頁面,相應key對應的value值會實時變化)。
註解方式
使用者名稱: apollo1111
密碼: hello
xml方式
使用者名稱: apollo1111
密碼: hello
config取值
使用者名稱: apollo1111
密碼: hello
namespace verify:
x:0
說明:這裡引入apollo的工程是我自己建的一個dubbo+spring mvc工程,程式碼細節部分請參考github原始碼:https://github.com/MAXAmbitious/lvba
總結
這篇文章只是apollo入門教程,寫的比較倉促,有不理解的地方歡迎溝通交流,關於apollo更詳盡的內容請參閱官網https://github.com/ctripcorp/apollo/wiki。