本篇文章是繼上一篇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,是以兩次通路的結果不同,則部署成功。