天天看點

SpringCloud入門(七)之Config(下)三,用戶端配置四,Config配置實踐

本篇文章是繼上一篇SpringCloud入門(七)之Config(上)之後的,是以目錄也是從之下的第三開始。

文章目錄

  • 三,用戶端配置
    • 3.1本地倉庫建立yml
    • 3.2 pom.xml
    • 3.3 bootstrap.yml
    • 3.4 測試Controller
    • 3.5 啟動類
    • 3.6 測試
  • 四,Config配置實踐
    • 4.1本地倉庫配置
    • 4.2 pom.xml(1)
    • 4.2 bootstrap.yml(1)
    • 4.3 啟動類(1)
    • 4.4 新8001
    • 4.5 測試

三,用戶端配置

3.1本地倉庫建立yml

在本地倉庫 E:\Workspace\Git\servicecloud-config 路徑下建立檔案servicecloud-config -client.yml

server:
   port: 8201
spring:
   profiles: dev
   application: 
      name: servicecloud-config-client
eureka:
   client: 
      service-url:
         defaultZone: http://eureka-dev.com:7001/eureka/

---
server:
   port: 8202
spring:
   profiles: test
   application: 
      name: servicecloud-config-client
eureka:
   client: 
      service-url:
         defaultZone: http://eureka-dev.com:7001/eureka/

# 必須儲存為utf-8格式
           

然後将建立的application.yml檔案推送到GitHub上

git status

git add .

git commit -m "init file"

git push origin master
=====================不知為何,不加下面的指令就無法送出成功=======================
git remote add origin "[email protected]:XXX/servicecloud-config.git"

git pull --rebase origin master

git push -u origin master

           

3.2 pom.xml

建立module子產品servicecloud-config-client-3355,修改pom.xml檔案:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.lmc</groupId>
    <artifactId>servicecloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>servicecloud-config-client-3355</artifactId>
  
  <dependencies>
  	<!-- 自己定義的api -->
   <dependency>
     <groupId>com.lmc</groupId>
     <artifactId>servicecloud-api</artifactId>
     <version>${project.version}</version>
   </dependency>

   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
   </dependency>

   <!-- 修改後立即生效,熱部署 -->
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>springloaded</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
   </dependency>
   
   <!-- Ribbon相關 -->
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-ribbon</artifactId>
   </dependency>

   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-config</artifactId>
   </dependency>

   <!-- feign相關 -->
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-feign</artifactId>
   </dependency>
   
   <!-- config相關 -->
   <dependency> 
	    <groupId>org.springframework.cloud</groupId>
	    <artifactId>spring-cloud-starter-config</artifactId>
	    <version>1.2.0.RELEASE</version> 
	</dependency>
   
   <dependency>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit</artifactId>
     <version>4.10.0.201712302008-r</version>
   </dependency>
   
  </dependencies>
  
</project>
           

3.3 bootstrap.yml

application.yml是使用者級的資源配置項

bootstrap.yml是系統級的,優先級更高

建立bootstrap.yml:

spring: 
   cloud: 
      config: 
         name: servicecloud-config-client #需要從git讀取的資源名稱,沒有字尾
         profile: dev #本次通路的配置項
         label: master
         uri: http://localhost:3344 #本微服務啟動後先去找3344服務,通過springcloudconfig擷取GitHub的服務位址
           

​ 服務啟動時,本微服務先會去配置服務端 http://localhost:3344 擷取名為 servicecloud-config-client 的配置檔案,然後通過 bootstrap.yml 的profile 屬性,去 servicecloud-config-client 配置檔案擷取相關配置參數。

再建立application.yml,配置微服務名稱:

spring:
  application: 
     name: servicecloud-config-client
           

3.4 測試Controller

建立類ConfigClientRest,由于測試是否能從git擷取配置資料:

package com.lmc.springcloud.rest;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConfigClientRest {
	
	@Value("${spring.application.name}")
	private String applicationName;
	
	@Value("${eureka.client.service-url.defaultZone}")
	private String eurekaServers = "lmchh";
	
	@Value("${server.port}")
	private String port;
	
	@RequestMapping("/config")
	public String getConfig(){
		String url = "applicationName: " + applicationName +
				"\t eurekaServers: " + eurekaServers + "\t port: " + port;
		System.out.println(url);
		return url;
	}

}

           

@Value對應的參數都是在GitHub上面的

3.5 啟動類

建立啟動類ConfigClient_3355_StartSpringCloudApp:

package com.lmc.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan("com.lmc.springcloud")
public class ConfigClient_3355_StartSpringCloudApp {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SpringApplication.run(ConfigClient_3355_StartSpringCloudApp.class, args);

	}

}

           

3.6 測試

第一步:先啟動配置服務類3344,通路 http://localhost:3344/application-dev.yml 成功

第二步:啟動配置用戶端3355,通路 http://localhost:8201/config

第三步:修改3355用戶端的 bootstrap.yml, 将profile值dev改成test

第四步:通路 http://localhost:8202/config

四,Config配置實踐

4.1本地倉庫配置

在本地倉庫目錄 E:\Workspace\Git\servicecloud-config 路徑下建立檔案servicecloud-config -eureka-client.yml:

spring: 
   profiles: 
      active: 
      - dev

---

server: 
   port: 7001

spring: 
   profiles: dev
   application: 
      name: servicecloud-config-eureka-client
eureka: 
   instance: 
      hostname: eureka7001.com
   client: 
      register-with-eureka: false
      fetch-registry: false
      service-url: 
         defaultZone: http://eureka7001.com:7001/eureka/

---
server: 
   port: 7001
spring: 
   profiles: test
   application: 
      name: servicecloud-config-eureka-client
eureka: 
   instance: 
      hostname: eureka7001.com
   client: 
      register-with-eureka: false
      fetch-registry: false
      service-url: 
         defaultZone: http://eureka7001.com:7001/eureka/

# 必須儲存為utf-8格式
           

繼續在本地倉庫目錄 E:\Workspace\Git\servicecloud-config 路徑下建立檔案servicecloud-config -dept-client.yml:

spring:
   profiles:
      active:
      - dev
---

server:
   port: 8001
spring:
   profiles: dev
   application: 
      name: servicecloud-config-dept-client
   datasource:
       type: com.alibaba.druid.pool.DruidDataSource            # 目前資料源操作類型
       driver-class-name: com.mysql.jdbc.Driver              # mysql驅動包
       url: jdbc:mysql://localhost:3306/clouddb01              # 資料庫名稱
       username: root
       password: root
   dbcp2:
      min-idle: 5                                           # 資料庫連接配接池的最小維持連接配接數
      initial-size: 5                                       # 初始化連接配接數
      max-total: 5                                          # 最大連接配接數
      max-wait-millis: 200   

mybatis:
  config-location: classpath:mybatis/mybatis.cfg.xml        # mybatis配置檔案所在路徑
  type-aliases-package: com.lmc.springcloud.entities    # 所有Entity别名類所在包
  mapper-locations: classpath*:mybatis/mapper/**/*.xml     # mapper映射檔案
  
eureka:
   client: 
      service-url: 
         defaultZone: http://eureka7001.com:7001/eureka
   instance:
      instance-id: dept-8001				#自定義服務名稱資訊
      prefer-ip-address: true   

info:
   app.name: lmc-servicecloud
   company.name: www.lmc.com
   build.artifactId: $project.artifactId$
   build.version: $project.version$
   
---

server:
   port: 8001
spring:
   profiles: test
   application: 
      name: servicecloud-config-dept-client
   datasource:
       type: com.alibaba.druid.pool.DruidDataSource            # 目前資料源操作類型
       driver-class-name: com.mysql.jdbc.Driver              # mysql驅動包
       url: jdbc:mysql://localhost:3306/clouddb02              # 資料庫名稱
       username: root
       password: root
   dbcp2:
      min-idle: 5                                           # 資料庫連接配接池的最小維持連接配接數
      initial-size: 5                                       # 初始化連接配接數
      max-total: 5                                          # 最大連接配接數
      max-wait-millis: 200   

mybatis:
  config-location: classpath:mybatis/mybatis.cfg.xml        # mybatis配置檔案所在路徑
  type-aliases-package: com.lmc.springcloud.entities    # 所有Entity别名類所在包
  mapper-locations: classpath*:mybatis/mapper/**/*.xml     # mapper映射檔案
  
eureka:
   client: 
      service-url: 
         defaultZone: http://eureka7001.com:7001/eureka
   instance:
      instance-id: dept-8001				#自定義服務名稱資訊
      prefer-ip-address: true   

info:
   app.name: lmc-servicecloud
   company.name: www.lmc.com
   build.artifactId: $project.artifactId$
   build.version: $project.version$
           

4.2 pom.xml(1)

建立config 版的eureka服務中心servicecloud-config-eureka-client-7001,配置pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.lmc</groupId>
    <artifactId>servicecloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>servicecloud-config-eureka-client-7001</artifactId>
  
  <dependencies>
  
  <!-- config相關 -->
   <dependency> 
	    <groupId>org.springframework.cloud</groupId>
	    <artifactId>spring-cloud-starter-config</artifactId>
	    <version>1.2.0.RELEASE</version> 
	</dependency>

   <!--eureka-server服務端 -->
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-eureka-server</artifactId>
   </dependency>

   <!-- 修改後立即生效,熱部署 -->
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>springloaded</artifactId>
   </dependency>

   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
   </dependency>

  </dependencies>
</project>
           

4.2 bootstrap.yml(1)

建立 bootstrap.yml :

spring: 
   cloud: 
      config: 
         name: servicecloud-config-eureka-client #需要從git讀取的資源名稱,沒有字尾
         profile: dev #本次通路的配置項
         label: master
         uri: http://localhost:3344 #本微服務啟動後先去找3344服務,通過springcloudconfig擷取GitHub的服務位址
           

建立application.yml:

spring:
  application: 
     name: servicecloud-config-dept-client
           

4.3 啟動類(1)

建立啟動類:

package com.lmc.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;


@SpringBootApplication
@EnableEurekaServer//EurekaServer伺服器端啟動類,接受其它微服務注冊進來
public class Config_Git_EurekaServer7001_App{
	
  public static void main(String[] args){
	  SpringApplication.run(Config_Git_EurekaServer7001_App.class, args);
  }
  
}

           

此時,先啟動3344,再啟動7001的 http://eureka7001.com:7001/ ,能夠正常進行通路了。

4.4 新8001

參照8001再建立servicecloud-config-dept-client的新module,pom.xml與之前8001一樣。

bootstrap.yml:

spring: 
   cloud: 
      config: 
         name: servicecloud-config-dept-client #需要從git讀取的資源名稱,沒有字尾
         profile: dev #本次通路的配置項
         label: master
         uri: http://localhost:3344 #本微服務啟動後先去找3344服務,通過springcloudconfig擷取GitHub的服務位址
           

application.yml:

spring:
  application: 
     name: servicecloud-config-dept-client
           

4.5 測試

第一步:先啟動3344配置伺服器 ( http://localhost:3344/servicecloud-config-dept-client-dev.yml )

第二步:啟動7001服務注冊中心( http://eureka7001.com:7001/ )

第三步:啟動8001服務提供者( http://localhost:8001/dept/list )

第四步:修改新8001的bootstrap.yml的profiles為test( http://localhost:8001/dept/list )

由于dev中通路的是clouddb01,test中通路的是clouddb02,是以兩次通路的結果不同,則部署成功。