spring cloud Config--server
概述
使用Config Server,您可以在所有環境中管理應用程式的外部屬性。客戶端和伺服器上的概念對映與Spring Environment
和PropertySource
抽象相同,因此它們與Spring應用程式非常契合,但可以與任何以任何語言執行的應用程式一起使用。隨著應用程式通過從開發人員到測試和生產的部署流程,您可以管理這些環境之間的配置,並確定應用程式具有遷移時需要執行的一切。伺服器儲存後端的預設實現使用git,因此它輕鬆支援標籤版本的配置環境,以及可以訪問用於管理內容的各種工具。很容易新增替代實現,並使用Spring配置將其插入
以上是Spring Cloud官網對配置服務的描述, 簡單闡述一下我的理解。比如我們要搭建一個網站,需要配置資料庫連線,指定資料庫伺服器的IP地址,資料庫名稱,使用者名稱和口令等資訊。通常的方法, 我們可以在一個配置檔案中定義這些資訊,或者開發一個頁面專門配置這些東西。只有一個web伺服器的時候, 很方便。
但假如需要搭建同多臺伺服器時,當然可以每臺伺服器做同樣配置,但維護和同步會很麻煩。我理解的配置服務至少有兩種不同場景:
1). 多個客戶使用同一配置: 比如,多臺伺服器組成的叢集,假如後端使用同一資料庫,那麼每臺伺服器都是用相同的配置。
2). 不同客戶使用不同的配置: 比如典型的場景是,開發,測試,生產使用相同的系統,但使用不同的資料庫
如果有個統一的根本配置,是不是就很方便,一個可行的辦法是,把這些配置檔案放到一個共享儲存(比如網路共享盤)中。這樣只需要在共享儲存修改一個或多個配置檔案就可以了。但共享檔案的方式受到具體佈署環境的限制,很多時候很難達到多臺Web伺服器共享同一個儲存硬碟。
共享盤的缺點是資源定位比較困難,Spring Cloud的解決方案是, 將這些配置檔案放到版本管理伺服器裡面,Spring Cloud預設配置使用GIT中。所有Web服務均從GIT中獲取這些配置檔案。由於GIT伺服器與具體Web伺服器之間不需要共享儲存, 只要網路可達就行,從而可以實現Web服務於配置資訊的存放位置的解耦。
其架構原理圖大致如下:
我們將配置檔案放入git或者svn等服務中,通過一個Config Server服務來獲取git中的配置資料,而我們需要使用的到配置檔案的Config Client系統可以通過Config Server來獲取對應的配置。
下面我們通過一個示例來演示一下config是如何被各個微服務系統獲取到的。
1.向git中上傳示例配置檔案
multiple-test.properties
#datasource -- mysql
multiple.datasource.master.url=jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
multiple.datasource.master.username=root
multiple.datasource.master.password=pypua
multiple.datasource.master.driverClassName=com.mysql.jdbc.Driver
multiple.datasource.master.InitialSize=10
multiple.datasource.master.MinIdle=10
multiple.datasource.master.MaxActive=100
multiple.datasource.slave.url=jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
multiple.datasource.slave.username=root
multiple.datasource.slave.password=pypua
multiple.datasource.slave.driverClassName=com.mysql.jdbc.Driver
multiple.datasource.slave.InitialSize=10
multiple.datasource.slave.MinIdle=10
multiple.datasource.slave.MaxActive=100
檔名分別為:
microservice-dev.properties
microservice-production.properties
microservice-test.properties
對應不同的三個環境。其中命名規則如下
onfig 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, 檔案字尾是.properties
2.建立springcloud-configserver微服務(這裡需要註冊到eureka服務,配合eureka使用)
父專案pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>
<!-- 父專案骨架 -->
<groupId>com.pupeiyuan.springcloud</groupId>
<artifactId>spring-Cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 包含的子專案 -->
<modules>
<module>springcloud-eureka</module>
<module>springcloud-configServer</module>
<module>springcloud-configClient</module>
<module>springcloud-ssmServer</module>
</modules>
<!-- java版本資訊 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<!-- springboot以來的父專案 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<!-- springcloud版本依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<!-- maven外掛 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
專案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.pupeiyuan.springcloud</groupId>
<artifactId>spring-Cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>springcloud-configServer</artifactId>
<dependencies>
<!--Spring Cloud Config 服務端依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
</dependencies>
</project>
aaplication.yml
server:
port: 8080
spring:
cloud:
config:
server:
git:
uri: https://gitee.com/admin_pypua/test.git #uri:表示你配置檔案在git中的地址
username:
password:
application:
name: pringcloud-configServer
eureka:
client:
serviceUrl:
defaultZone: http://root:1[email protected]:8000/eureka
instance:
prefer-ip-address: true
啟動類 ConfigServerApplication.java
package com.spring.pupeiyuan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
3.這樣一個單點config server就寫好了下面啟動測試一下
至此,單點config部署完畢