Java springboot B2B2C o2o多用戶商城 springcloud架構 (二): 配置管理

使用Config Server,您能夠在全部環境中管理應用程序的外部屬性。客戶端和服務器上的概念映射與Spring Environment和PropertySource抽象相同,所以它們與Spring應用程序很是契合,但能夠與任何以任何語言運行的應用程序一塊兒使用。隨着應用程序經過從開發人員到測試和生產的部署流程,您能夠管理這些環境之間的配置,並肯定應用程序具備遷移時須要運行的一切。服務器存儲後端的默認實現使用git,所以它輕鬆支持標籤版本的配置環境,以及能夠訪問用於管理內容的各類工具。很容易添加替代實現,並使用Spring配置將其插入html

以上是Spring Cloud官網對配置服務的描述, 簡單闡述一下個人理解。好比咱們要搭建一個網站,須要配置數據庫鏈接,指定數據庫服務器的IP地址,數據庫名稱,用戶名和口令等信息。一般的方法, 咱們能夠在一個配置文件中定義這些信息,或者開發一個頁面專門配置這些東西。只有一個web服務器的時候, 很方便。git

但假如須要搭建同多臺服務器時,固然能夠每臺服務器作一樣配置,但維護和同步會很麻煩。我理解的配置服務至少有兩種不一樣場景:web

1)多個客戶使用同一配置: 好比,多臺服務器組成的集羣,假如後端使用同一數據庫,那麼每臺服務器都是用相同的配置。spring

2)不一樣客戶使用不一樣的配置: 好比典型的場景是,開發,測試,生產使用相同的系統,但使用不一樣的數據庫數據庫

若是有個統一的根本配置,是否是就很方便,一個可行的辦法是,把這些配置文件放到一個共享存儲(好比網絡共享盤)中。這樣只須要在共享存儲修改一個或多個配置文件就能夠了。但共享文件的方式受到具體佈署環境的限制,不少時候很難達到多臺Web服務器共享同一個存儲硬盤。後端

共享盤的缺點是資源定位比較困難,Spring Cloud的解決方案是, 將這些配置文件放到版本管理服務器裏面,Spring Cloud缺省配置使用GIT中。全部Web服務均從GIT中獲取這些配置文件。因爲GIT服務器與具體Web服務器之間不須要共享存儲, 只要網絡可達就行,從而能夠實現Web服務於配置信息的存放位置的解耦。bash

Spring Cloud統一控制應用和GIT服務的交互,應用只須要按照Spring Cloud的規範配置GIT的URL便可。 使用GIT後,場景2和場景1的區別僅僅是,場景2中不一樣的client使用不一樣版本的配置文件,但應用但訪問的文件看起來是會是同一個。Spring Cloud的配置服務結構入下圖服務器

其中關鍵字hello的值「Hello World」,就是咱們要輸出的內容。網絡

一. 建立config Server架構

1. 建立Config Server, maven工程裏面配置spring-cloud-config-server

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
</dependency>複製代碼

完整配置以下:

pom.xml

2. 建立Config Server,它也是一個Spring Boot應用,@EnableConfigServer註解說明了一個Config Server。一樣咱們使用@EnableEurekaClient將它註冊到服務中心。

複製代碼
1 package springcloud.helloworld.config.server;
 2 
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 import org.springframework.cloud.config.server.EnableConfigServer;
 6 import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
 7 
 8 @EnableEurekaServer
 9 @EnableConfigServer
10 @SpringBootApplication
11 public class ConfigServerApplication {
12     public static void main(String[] args) {
13         SpringApplication.run(ConfigServerApplication.class, args);
14     }
15 }複製代碼
複製代碼

3. Config server的配置文件appication.yml , 注意配置文件的url是GIT服務器的倉庫地址, searchPaths配置文件所在的文件夾在倉庫中的路徑, 在server端不須要指定具體配置文件名, 由於具體的配置文件是什麼有應用(也就是client)決定。

複製代碼
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 8888
 
spring:
  cloud:
    config:
      server:
        git:
          uri: https://git.oschina.net/chrywhy/test
          searchPaths: spring-cloud/helloworldConfig
  application:
    name: config-server複製代碼
複製代碼

4. 啓動config server後,訪問http://localhost:8888/abc/xyz, 可見以下響應。這個是輸出是並無包括具體配置文件的內容, 這個響應說明,config server能夠正常訪問咱們配置在application.yml中的GIT服務

這個URL是啥意思, 須要解釋一下。咱們從輸出就能夠看到 abc 就是application的名字,xyz是profile的名字, 注意這裏的abc, xyz均是隨便輸入的名字, 並不須要真實存在,config server這個REST接口返回的只是應用名爲abc, profile名爲xyz時,GIT配置環境的結構。

config server提供的REST接口,Spring Cloud官方文檔提供了幾個可選URL能夠是以下幾個:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
好比 第三個格式,若是咱們在GIT版本庫中有一個配置文件 spring-cloud/helloworldConfig/config-client-dev.properties. 那麼訪問http://localhost:8888/config-client-dev.properties就能夠顯示配置文件內容。這個例子中, application的名字是"config-client"(也是下面咱們即將建立的client), profile名字是dev, 文件後綴是.propertie

本例因爲配置了eureka服務中心,因此這個config server做爲一個eureka client註冊到了 eureka server中, 能夠從http://localhost:8761看到咱們啓動的config server, 若是不須要註冊到服務中心, 也可把這個配置去掉

總體架構以下:

完整項目的源碼來源

Spring Cloud大型企業分佈式微服務雲構建的B2B2C電子商務平臺源碼請加企鵝求求:一零三八七七四六二六

相關文章
相關標籤/搜索