八、SpringCloud-Config(Git遠程配置)

Spring Cloud Config 分佈式配置

Dalston.RELEASEjava

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

概述

分佈式系統面臨的–配置文件問題git

微服務意味着要將單體應用中的業務拆分紅一個個子服務,每一個服務的粒度相對較小,所以系統中會出現大量的服務,因爲每一個服務都須要必要的配置信息才能運行,因此一套集中式的,動態的配置管理設施是必不可少的。spring cloud提供了configServer來解決這個問題,咱們每個微服務本身帶着一個application.yml,那上百個的配置文件修改起來,使人頭疼!web

什麼是SpringCloud config分佈式配置中心?spring

在這裏插入圖片描述

​ spring cloud config 爲微服務架構中的微服務提供集中化的外部支持,配置服務器爲各個不一樣微服務應用的全部環節提供了一箇中心化的外部配置。sql

​ spring cloud config 分爲服務端和客戶端兩部分。bootstrap

​ 服務端也稱爲 分佈式配置中心,它是一個獨立的微服務應用,用來鏈接配置服務器併爲客戶端提供獲取配置信息,加密,解密信息等訪問接口。後端

​ 客戶端則是經過指定的配置中心來管理應用資源,以及與業務相關的配置內容,並在啓動的時候從配置中心獲取和加載配置信息。配置服務器默認採用git來存儲配置信息,這樣就有助於對環境配置進行版本管理。而且可用經過git客戶端工具來方便的管理和訪問配置內容。api

spring cloud config 分佈式配置中心能幹嗎?服務器

  • 集中式管理配置文件
  • 不一樣環境,不一樣配置,動態化的配置更新,分環境部署,好比 /dev /test /prod /beta /release
  • 運行期間動態調整配置,再也不須要在每一個服務部署的機器上編寫配置文件,服務會向配置中心統一拉取配置本身的信息
  • 當配置發生變更時,服務不須要重啓,便可感知到配置的變化,並應用新的配置
  • 將配置信息以REST接口的形式暴露

spring cloud config 分佈式配置中心與GitHub整合

​ 因爲spring cloud config 默認使用git來存儲配置文件 (也有其餘方式,好比自持SVN 和本地文件),可是最推薦的仍是git ,並且使用的是 http / https 訪問的形式。

簡單案例配置:

服務端

一、上傳配置到碼雲

上傳配置文件到碼雲上面,關於git的操做能夠參考個人上一篇博客~

 二、新建springcloud-config-server-3344項目,添加依賴

dependencies>
   <!--web-->
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
   <!--config-->
   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-config-server</artifactId>
       <version>2.1.1.RELEASE</version>
   </dependency>
   <!--eureka-->
   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-eureka</artifactId>
       <version>1.4.6.RELEASE</version>
   </dependency>
/dependencies>

三、編寫application.yaml配置

server:
  port: 3344

spring:
  application:
    name: springcloud-config-server
  # 鏈接碼雲遠程倉庫
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/zhang-zhixi/springcloud-config.git
          
# 不加這個配置會報Cannot execute request on any known server 這個錯:鏈接Eureka服務端地址不對
# 或者直接註釋掉eureka依賴 這裏暫時用不到eureka
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

四、測試讀取碼雲上的配置文件

開啓3344端口

訪問:http://localhost:3344/application-dev.yaml

客戶端:

一、在碼雲項目文件中新建配置:config-client.yaml

spring:
  profiles:
    active: dev

---
server:
  port: 8201
# spring配置
spring:
  profiles: dev
  application:
    name: springcloud-provider-dept
#Eureka配置
eureka:
  client:
    service-url: #監控頁面~
      defaultZone: http://eureka7001.com:7001/eureka/

---
server:
  port: 8202
# spring配置
spring:
  profiles: test
  application:
    name: springcloud-provider-dept
#Eureka配置
eureka:
  client:
    service-url: #監控頁面~
      defaultZone: http://eureka7001.com:7001/eureka/

二、上傳到碼雲

 三、新建springcloud-config-server-3355項目,導入pom依賴

 <dependencies>
     <!--config-->
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-config</artifactId>
         <version>2.1.1.RELEASE</version>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-actuator</artifactId>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
 </dependencies>

 四、編寫配置:resources

bootstrap.yml 是系統級別的配置

spring:
  cloud:
    config:
      # 用於獲取遠程屬性的應用程序的名稱
      name: config-client
      # 遠程服務器的URI(默認爲http:// localhost:8888)。
      uri: http://localhost:3344
      # 用於拉取遠程配置屬性的標籤名稱。 默認設置是在服務器上設置的(一般是基於git的服務器的「 master」)
      label: master
      # 獲取遠程配置的默認環境
      profile: dev

application.yml 是用戶級別的配置

server:
  port: 3355
spring:
  application:
    name: springcloud-config-client-3355

五、編寫controller:ClientController

@RestController
public class ClientController {

    // 讀取端口
    @Value("${server.port}")
    private String serverPort;
    // 讀取應用名稱
    @Value("${spring.application.name}")
    private String appName;
    // 讀取eureka
    @Value("${eureka.client.service-url.defaultZone}")
    private String eurekaConfig;

    @RequestMapping("/config") public String config() {
        return serverPort + "\n" + appName + "\n" + eurekaConfig + "\n";
    }
}

六、編寫主啓動文件Client_3355

@SpringBootApplication
public class Client_3355 {
    public static void main(String[] args) {
        SpringApplication.run(Client_3355.class, args);
    }
}

七、測試

1.啓動springcloud-config-server-3344(服務端訪問git)

  訪問http://localhost:3344/config-client-dev.yaml,能夠拿到git上的文件,說明成功讀取到client配置文件、

2.啓動springcloud-config-server-3355(客戶端訪問服務端)

  實際上是客戶端經過訪問服務端從而拿到git上面的文件

3.訪問http://localhost:8201/config

 遠程配置服務實戰測試

遠程註冊中心設置zureka:

一、建立配置文件:

  本地新建config-dept.yml和config-eureka.yml並提交到碼雲倉庫

 config-eureka.yaml:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=
spring:
  profiles:
    active: dev
---
server:
  port: 7001

# spring配置
spring:
  profiles:
    active: dev

#Eureka配置
eureka:
  instance:
    hostname: eureka7001.com #Eureka服務端的實例名字
  client:
    register-with-eureka: false #表示是否向 Eureka 註冊中心註冊本身(這個模塊自己是服務器,因此不須要)
    fetch-registry: false #fetch-registry若是爲false,則表示本身爲註冊中心
    service-url: #監控頁面~
      #重寫Eureka的默認端口以及訪問路徑 --->http://localhost:7001/eureka/
      # 單機: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      # 集羣(關聯):7001關聯700二、7003
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
---
server:
  port: 7001

# spring配置
spring:
  profiles:
    active: test

#Eureka配置
eureka:
  instance:
    hostname: eureka7001.com #Eureka服務端的實例名字
  client:
    register-with-eureka: false #表示是否向 Eureka 註冊中心註冊本身(這個模塊自己是服務器,因此不須要)
    fetch-registry: false #fetch-registry若是爲false,則表示本身爲註冊中心
    service-url: #監控頁面~
      #重寫Eureka的默認端口以及訪問路徑 --->http://localhost:7001/eureka/
      # 單機: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      # 集羣(關聯):7001關聯700二、7003
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
View Code

config-dept.yaml:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=
spring:
  profiles:
    active: dev

# 環境一
---
server:
  port: 8001

# mybatis配置
mybatis:
  type-aliases-package: com.zhixi.pojo
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml

# spring配置
spring:
  profiles: dev
  application:
    name: springcloud-provider-dept # 三個服務名稱一致
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/db01?userSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: zhixi158

# Eureka配置:配置服務註冊中心地址
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
  instance:
    instance-id: springcloud-provider-dept-8001 #修改Eureka上的默認描述信息

# info配置
info:
  # 項目的名稱
  app.name: zhixi-springcloud
  # 公司的名稱
  company.name: com.zhixi.study





# 環境一
---
server:
  port: 8001

# mybatis配置
mybatis:
  type-aliases-package: com.zhixi.pojo
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml

# spring配置
spring:
  profiles: test
  application:
    name: springcloud-provider-dept # 三個服務名稱一致
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/db02?userSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: zhixi158

# Eureka配置:配置服務註冊中心地址
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
  instance:
    instance-id: springcloud-provider-dept-8001 #修改Eureka上的默認描述信息

# info配置
info:
  # 項目的名稱
  app.name: zhixi-springcloud
  # 公司的名稱
  company.name: com.zhixi.study
View Code

 二、上傳到git

 上傳方法跟上面同樣,沒必要多說了~

三、新建模塊

新建springcloud-config-eureka-7001模塊,並將原來的springcloud-eureka-7001模塊下的內容拷貝的該模塊。

1.清空該模塊的application.yml配置,並新建bootstrap.yml鏈接遠程配置

spring:
  cloud:
    config:
      name: config-eureka # 倉庫中的配置文件名稱
      label: master
      profile: dev
      uri: http://localhost:3344

2.application.yaml配置

spring:
  application:
    name: springcloud-config-eureka-7001

 

3.在pom.xml中添加spring cloud config依賴

<!--config-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
    <version>2.1.1.RELEASE</version>
</dependency>

4.主啓動類EurekaConfig_Run_7001

@SpringBootApplication
@EnableEurekaServer
public class EurekaConfig_Run_7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaConfig_Run_7001.class, args);
    }
}

5.測試

啓動 Config_Server_3344 

訪問http://localhost:3344/config-eureka-dev.yaml,出現如下頁面說明可以成功訪問到git上的配置:

 啓動springcloud-config-eureka-7001

 訪問:http://localhost:7001/,能夠看到成功訪問到了註冊中心

 

 服務提供者設置:provider

一、新建模塊

新建springcloud-config-dept-8001模塊並拷貝springcloud-provider-dept-8001的內容

同理導入spring cloud config依賴、清空application.yml 、新建bootstrap.yml配置文件並配置

二、pom依賴

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=
<dependencies>
        <!--config-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>
        <!--咱們須要拿到實體類,因此要配置api moudle-->
        <dependency>
            <groupId>com.zhixi</groupId>
            <artifactId>springcloud-01-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <!--test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
        <!--熱部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <!--Eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <!--完善監控信息-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--Eureka依賴-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <!--actuator完善監控信息-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

    </dependencies>
View Code

 

三、編寫配置信息

application.yaml

spring:
  application:
    name: springcloud-provider-config-dept-8001

 

bootstrap.yaml

spring:
  cloud:
    config:
      name: config-dept # 倉庫中的配置文件名稱
      label: master
      profile: dev
      uri: http://localhost:3344

 

四、編寫主啓動類

// 啓用發現客戶端
@EnableDiscoveryClient
// 開啓Eureka客戶端註解,在服務啓動後自動向註冊中心註冊服務
@EnableEurekaClient
// 啓動類
@SpringBootApplication
public class DeptConfigProvider_8001 {
    public static void main(String[] args) {
        SpringApplication.run(DeptConfigProvider_8001.class, args);
    }
}

 

五、測試

啓動springcloud-config-server-3344(服務端訪問git)

啓動springcloud-config-eureka-7001(註冊中心

啓動springcloud-provider-config-dept-8001(服務提供)

能夠看到遠程配置的8001已經生效了~

 

 而後經過遠程git服務來訪問業務,發現也是沒有問題的:

相關文章
相關標籤/搜索