Apollo官網地址git
如何安裝服務端能夠按照上面官網的步驟。github
這裏主要說明一下應用如何接入apollo。spring
確保classpath:/META-INF/app.properties文件存在,而且其中內容形如:app.id=YOUR-APP-IDapi
服務端的appid緩存
應用在不一樣的環境能夠有不一樣的配置, Environment能夠經過如下3種方式的任意一個配置:服務器
服務端的environmentapp
Apollo客戶端會把從服務端獲取到的配置在本地文件系統緩存一份,當去服務器讀取配置失敗時,會使用本地緩存的。框架
Mac/Linux: /opt/data/{appId}/config-cacheide
Windows: C:\opt\data{appId}\config-cachethis
確保目錄存在,且應用有讀寫權限。
<dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>0.6.2</version> </dependency> <repository> <id>internal.repo</id> <url>https://raw.github.com/ctripcorp/apollo/mvn-repo/</url> </repository>
經過Java的System Property env來指定
-Ddev_meta=http://192.168.30.27:8018
經過namespace讀取配置,若是不指定則默認拿application
經過api方式獲取的配置,修改時不用重啓項目,直接生效。
Config config = ConfigService.getAppConfig(); //ConfigService.getConfig(Namespace); String key = "key"; //key String defaultValue = "defaultValue"; //默認值,讀取不到配置就會使用默認值,建議都加上默認值 String value = config.getProperty(key, defaultValue);
監聽配置修改事件
Config config = ConfigService.getAppConfig(); //config instance is singleton for each namespace and is never null config.addChangeListener(new ConfigChangeListener() { @Override public void onChange(ConfigChangeEvent changeEvent) { System.out.println("Changes for namespace " + changeEvent.getNamespace()); for (String key : changeEvent.changedKeys()) { ConfigChange change = changeEvent.getChange(key); System.out.println(String.format("Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s", change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType())); } } });
6.2.1 基於XML的配置
<?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: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.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd"> <!-- 這個是最簡單的配置形式,通常應用用這種形式就能夠了,用來指示Apollo注入application namespace的配置到Spring環境中 --> <apollo:config/> <!-- 這個是稍微複雜一些的配置形式,指示Apollo注入FX.apollo和FX.soa namespace的配置到Spring環境中 --> <apollo:config namespaces="FX.apollo,FX.soa"/> <bean class="com.ctrip.framework.apollo.spring.TestXmlBean"> <property name="timeout" value="${timeout:100}"/> <property name="batch" value="${batch:200}"/> </bean> </beans>
6.2.2 基於Java的配置
使用@Value(${key:defaultValue})
public class TestJavaConfigBean { @Value("${timeout:100}") private int timeout; private int batch; @Value("${batch:200}") public void setBatch(int batch) { this.batch = batch; } public int getTimeout() { return timeout; } public int getBatch() { return batch; } }
@ApolloConfig用來自動注入Config對象
@ApolloConfigChangeListener用來自動註冊ConfigChangeListener
public class TestApolloAnnotationBean { @ApolloConfig("application") private Config anotherConfig; //inject config for namespace application //config change listener for namespace application @ApolloConfigChangeListener("application") private void anotherOnChange(ConfigChangeEvent changeEvent) { //do something } }
服務端的namespace: