? ? ? ? ?在咱們日常開發中,對于一些信息的配置加載一般都不會在代碼中寫死,而是通過一些配置動態加載。對于springcloud來說就是通過config來獲取配置中心的配置信息來實現的。那么怎么實現一個配置中心?
一、配置中心地址
? ? ? ? 選擇一個配置中心地址,我這里選的得是github,新建一個項目,簡單配置即可。
? ? ? ?咱們一般開發都分三個環境:開發、測試、和線上環境。新建三個文件將相應配置添加就可以了。
?
?
文件內容就隨便了,比如我的:
?
ssh服務配置,?
二、服務端
? ? ? ?有了配置地址后就該獲取配置信息了。新建一個maven項目,作為config服務端,負責從配置地址讀取相應配置(這里配置地址為自己的github),建好之后導入向管依賴。
需要的依賴:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId>
</dependency>
?
依賴添加完成后,創建一個啟動類,啟動類上需要添加一個注解:?@EnableConfigServer
在resources文件里面,新建一個bootstrap.yml文件
spring cloud 搭建。bootstrap.yml填寫配置信息
spring:application:name: config-servercloud:config:server:git:uri: https://github.com/LISHENGDRUNK/config-repo-demo.git#配置git倉庫地址 search-paths: config-repo #git倉庫地址下的相對地址,可以配置多個,用,分割。
server:port: 12000
?
配置信息講解:
? ? ?Spring boot config也提供本地存儲配置的方式,我們只需要設置屬性spring.profiel.active=native,config server會默認從應用的src/main/resource目錄下檢索配置文件,也可以通過spring.cloud.config.server.native.searchLocations=file:E:/properties屬性來指定配置文件的位置。雖然spring cloud config提供了這樣的功能,但是為了支持更好的管理內容和版本控制,還是推薦使用github的方式。
啟動類
啟動類添加@EnableConfigServer,激活對配置中心的支持
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}
?
到此 Server 端相關配置已經完成。
SpringCloud。
測試
首先我們先要測試 Server 端是否可以讀取到 github 上面的配置信息,直接訪問?http://localhost:12000/config-client/dev?返回信息如下:
{"name": "config-client","profiles": ["dev"],"label": null,"version": "4e3ca4b9e2bb96c9a0ba012f6c6e0b6cadc48f3e","state": null,"propertySources": [{"name": "https://github.com/LISHENGDRUNK/config-repo-demo.git","source": {"info.profile": "dev-update"}}]
}
?
? ? ? 上述的返回的信息包含了配置文件的位置、版本、配置文件的名稱以及配置文件中的具體內容,說明 Server 端已經成功獲取了 Git 倉庫的配置信息。
? ? ?如果直接查看配置文件中的配置信息可訪問?http://localhost:12000/config-client-dev.yml?返回:\
?
neo:
holle: dev-update
Spring Authorization Server、
四、客戶端
? ? ?修改配置文件config-client-dev.yml中配置信息為:dev holle, 再次在瀏覽器訪問?http://localhost:12000/config-client-dev.yml?返回:dev hello,說明 Server 端會自動讀取最新提交的內容。?
? 在完成了上述驗證之后,確定配置服務中心已經正常運作,下面我們嘗試如何在微服務應用中獲取上述的配置信息。
再創建一個基礎的 Spring Boot 應用,命名為 config-client。
添加依賴
在 pom.xml 中添加下述依賴:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId>
</dependency>
configurationproperties注解、?
需要配置兩個配置文件,application.yml 和 bootstrap.yml,配置分別如下:配置文件
?
application.yml
spring:application:name: config-git
server:port: 13000bootstrap.ymlpring:cloud:config:uri: http://localhost:12000 # 配置中心的具體地址,即 config-servername: config-client # 對應 {application} 部分profile: dev # 對應 {profile} 部分label: master # 對應 {label} 部分,即 Git 的分支(默認是master)。如果配置中心使用的是本地存儲,則該參數無用
?
特別注意:上面這些與 Spring Cloud Config 相關的屬性必須配置在 bootstrap.yml 中,config 部分內容才能被正確加載。因為 config 的相關配置會先于 application.yml,而 bootstrap.yml 的加載也是先于 application.yml。
啟動類
springconfig、啟動類不用修改,只用@SpringBootApplication就行了
@SpringBootApplication
public class SpringCloudConfigClientApplication {public static void main(String[] args) {SpringApplication.run(SpringCloudConfigClientApplication.class, args);}
}
在 Controller 中使用@Value注解來獲取 Server 端參數的值
@RestController
public class HelloController {@Value("${neo.hello:error}")private String profile;@GetMapping("/info")public Mono<String> hello() {return Mono.justOrEmpty(profile);}
}
測試
? ? ? ?啟動項目后訪問?http://localhost:13000/info?返回dev說明已經正確的從 Server 端獲取到了參數。到此一個完整的服務端提供配置服務,客戶端獲取配置參數的例子就完成了。
Springboot?? ? ? ?是不是很簡單呢,其實很多東西都是這樣。在我們還不了解他的時候他對我們是陌生的,當我們真的開始了解他的時候,他對我們來說其實就是那么簡單。當然對于我們程序員來說,代碼 看了千百遍不如敲十遍。只有多動手才是快速學習的最佳捷徑。
?
?