為什么要使用Apollo
在開發應用的時候我們常常需要把一些屬性抽取出來放在配置文件里面,方便后面根據需要進行修改。在沒有使用配置中心之前,可能我們只是把配置都放在項目的配置文件下面,這樣雖然是省事了不少,但也有一些缺點,比如想要修改配置的時候需要重新構建項目和重啟服務 、生產環境上一些敏感的配置容易泄露等等。
Apollo安裝
這個可以上github,上面有詳細的安裝說明文檔,鏈接,下面主要講下在代碼里面的使用
在項目pom.xml中引入apollo相關jar包
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.4.0</version>
</dependency>
在配置文件(application.properties)中添加apollo相關配置
# apollo集成
# apollo 配置應用的 appid
app.id=test
# apollo meta-server地址,一般同config-server地址
#當前環境服務配置地址,生產環境建議至少雙節點,可以填寫多個逗號分隔,使用一個單獨的域,如 http://config.xxx.com(由nginx等軟件負載平衡器支持),而不是多個IP地址,因為服務器可能會擴展或縮小。
apollo.meta=http://10.0.0.220:8080
#啟用apollo配置開關
apollo.bootstrap.enabled=true
#將Apollo配置加載提到初始化日志系統之前
apollo.bootstrap.eagerLoad.enabled=true
# apollo 使用配置的命名空間,多個以逗號分隔
apollo.bootstrap.namespaces = application
java代碼中讀取apollo配置的幾種寫法:
1. 通過@Configuration和@Value注解的方式,此種方式發布會自動刷新
@Configuration
public class JavaConfigBean1 {
@Value("${timeout:20}")
private int timeout;
public int getTimeout() {
return timeout;
}
}
2. 使用@ConfigurationProperties讀取,此種方式發布不會自動刷新
@Configuration
@ConfigurationProperties(prefix = "xx")
public class JavaConfigBean2 {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3. 使用@ApolloConfig讀取,此種方式發布會自動刷新
@ApolloConfig
private Config config;
@GetMapping("/test3")
public String test3(){
Set <String> propertyNames = config.getPropertyNames();
propertyNames.forEach(key -> {
System.err.println(key+"="+config.getIntProperty(key,0));
});
return propertyNames.toString();
}
4. 使用@ApolloJsonValue讀取,此種方式會自動刷新
@ApolloJsonValue("${jsonBeanProperty:[]}")
private List<User> anotherJsonBeans;
@GetMapping("/test4")
public void test4(){
anotherJsonBeans.forEach(item -> {
System.err.println(item.getUsername()+"--"+item.getPassword());
});
}
自動刷新就是改了配置中心的配置可以不用重啟服務,常用的使用方式就以上這些,當然還有一些復雜的使用方式,比如動態數據源等實現方式可以看官方的demo
