微服務架構中Springboot配置文件繁多,Apollo統一高效的管理Springboot配置文件。前端
簡單說就是說全部Springboot項目本地再也不須要配置文件,全部配置文件由Apollo統一管理,講的高大上點叫作雲配置。java
Apollo優勢:mysql
其餘的技術git
不用docker搭建,docker搭建有問題的,須要調節一些參數。
百度網盤下載github
在你的Apollo界面中,新建一個項目,配置中只有AppId重要,其餘隨意選。在你的Springboot添加Maven依賴,2019年11爲止最新的Apollo client jar包版本。web
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.5.0</version>
</dependency>
複製代碼
和Springboot和Spring整合有兩種方式(xml, 註解配置),這裏我只講註解配置。 spring
按照上圖,在Apollo端配置你的配置文件,修改啓動文件和本地application.propertiesimport com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@EnableApolloConfig
@RestController
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
@GetMapping("/hello")
public String hello() {
return "我是來自Apollo的8000";
}
}
複製代碼
本地文件配置,Apollo須要指定服務器地址,至此你再也不須要把其餘配置文件保存至本地。sql
#指定Appid,也就是你在Apollo建立項目指定的Appid,必定要指定對
app.id=test
#指定你的Apollo地址,Apollo 8070爲WebUI地址,8080爲Eureka註冊地址
apollo.meta=http://192.168.208.102:8080
複製代碼
本地訪問 localhost:8000,注意這個8000是上圖中我指定的server.port=8000docker
到此第一個雲配置完成,簡單吧。bootstrap
本地開發咱們能夠有兩個application.yml和application.properties,yml保存咱們本地開發的配置,properties保存apollo的配置,本地開發時,咱們只須要註釋掉properties內的內容,註釋掉@EnableApolloConfig便可完成加載本地yml配置文件,上線反之。經過註釋文件和代碼便可完成本地線上環境切換。
首先咱們先有一個概念
AppId 對 省
集羣 對 市
NameSpace 對 區
nameSpace是最底層的配置文件的描述,能夠理解namesapce就是一個文件
那麼咱們如何經過Apollo客戶端描述一個NameSpace,就像咱們如何精確描述一個區同樣的。
#指定Appid,也就是你在Apollo建立項目指定的Appid,必定要指定對
app.id=test
#指定你的Apollo地址,Apollo 8070爲WebUI地址,8080爲Eureka註冊地址
apollo.meta=http://192.168.208.102:8080
apollo.bootstrap.enabled=true
#若是你不手動指定集羣,默認集羣就是default
#如何指定集羣 apollo.cluster={你的集羣名}
#指定下你的yml配置的namespace
apollo.bootstrap.namespaces=testyml
複製代碼
啓動報錯
2019-11-09 04:16:14.513 WARN 9116 --- [ main] c.c.f.a.i.AbstractConfigRepository : Sync config failed, will retry. Repository class com.ctrip.framework.apollo.internals.RemoteConfigRepository, reason: Load Apollo Config failed - appId: test, cluster: default, namespace: testyml, url: http://192.168.208.102:8080/configs/test/default/testyml?ip=192.168.208.1 [Cause: [status code: 404] Could not find config for namespace - appId: test, cluster: default, namespace: testyml, please check whether the configs are released in Apollo!]
複製代碼
有報錯,根本不慌
報錯爲 http://192.168.208.102:8080/configs/test/default/testyml?ip=192.168.208.1 404找不到,能夠看到咱們Apollo客戶端其實就是用Http請求拿去配置數據(上面的ip地址分別是我apollo部署的地址和我本機的地址),可是咱們若是更改配置爲http://192.168.208.102:8080/configs/test/default/application?ip=192.168.208.1也就是將testyml改成咱們已有的application NameSpace,卻能夠訪問成功。
#修改配置文件application.properties
apollo.bootstrap.namespaces=testyml.yml
複製代碼
成功,搞定,很是簡單是否是
相信看到這裏,Apollo也不難嘛,很容易用的,它主要優勢來自於WebUI和細粒度的配置管理。
好的,咱們寫一個複雜的
@SpringBootApplication
@EnableApolloConfig
@RestController
public class TestApplication {
//在你yml裏面添加一個
//test: 隨意
@Value("${test}")
private String content;
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
//監聽testyml.yml的變化,填你本身的Namespace啊
@ApolloConfigChangeListener("testyml.yml")
public void change(ConfigChangeEvent cg){
System.out.println("發生改變了啦,我聽到了啊--------------------" + cg.getChange("test"));
}
@GetMapping("/hello")
public String hello() {
return "我是來自Apollo的" + content;
}
}
複製代碼
application.properties文件
#指定Appid,也就是你在Apollo建立項目指定的Appid,必定要指定對
app.id=test
#指定你的Apollo地址,Apollo 8070爲WebUI地址,8080爲Eureka註冊地址
apollo.meta=http://192.168.208.102:8080
apollo.bootstrap.enabled=true
#指定下你的yml配置
apollo.bootstrap.namespaces=testyml.yml
複製代碼
啓動後,能夠嘗試去Apollo修改下你的NameSpace的test對應的value,看看程序會打印出來什麼。
Apollo易用性,集羣性,高可用很是適合企業開發,並且他用法遠不止做爲SpringBoot的配置管理,既然咱們能夠經過Http拿到配置數據,是否是還有其餘不少的應用方法。
最後一句話:Apollo不難,多看看github文檔你就會了(中文的啊,還有專門的源碼解析)