在咱們日常開發中,對於一些信息的配置加載一般都不會在代碼中寫死,而是通過一些配置動態加載。對於springcloud來說就是通過config來獲取配置中心的配置信息來實現的。那么怎么實現一個配置中心?
一、配置中心地址
選擇一個配置中心地址,我這里選的得是github,新建一個項目,簡單配置即可。
咱們一般開發都分三個環境:開發、測試、和線上環境。新建三個文件將相應配置添加就可以了。
文件內容就隨便了,比如我的:
二、服務端
有了配置地址后就該獲取配置信息了。新建一個maven項目,作為config服務端,負責從配置地址讀取相應配置(這里配置地址為自己的github),建好之后導入向管依賴。
需要的依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
依賴添加完成后,創建一個啟動類,啟動類上需要添加一個注解: @EnableConfigServer
在resources文件里面,新建一個bootstrap.yml文件
bootstrap.yml填寫配置信息
spring:
application:
name: config-server
cloud:
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 端相關配置已經完成。
測試
首先我們先要測試 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
四、客戶端
修改配置文件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>
需要配置兩個配置文件,application.yml 和 bootstrap.yml,配置分別如下:配置文件
application.yml
spring:
application:
name: config-git
server:
port: 13000
bootstrap.yml
pring:
cloud:
config:
uri: http://localhost:12000 # 配置中心的具體地址,即 config-server
name: config-client # 對應 {application} 部分
profile: dev # 對應 {profile} 部分
label: master # 對應 {label} 部分,即 Git 的分支(默認是master)。如果配置中心使用的是本地存儲,則該參數無用
特別注意:上面這些與 Spring Cloud Config 相關的屬性必須配置在 bootstrap.yml 中,config 部分內容才能被正確加載。因為 config 的相關配置會先於 application.yml,而 bootstrap.yml 的加載也是先於 application.yml。
啟動類
啟動類不用修改,只用@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 端獲取到了參數。到此一個完整的服務端提供配置服務,客戶端獲取配置參數的例子就完成了。
是不是很簡單呢,其實很多東西都是這樣。在我們還不了解他的時候他對我們是陌生的,當我們真的開始了解他的時候,他對我們來說其實就是那么簡單。當然對於我們程序員來說,代碼 看了千百遍不如敲十遍。只有多動手才是快速學習的最佳捷徑。