SpringCloud入門教程(三)配置管理
配置管理根據字面上理解,就是一些管理專案中使用到的一些配置檔案。以前開發單臺伺服器的時候,我們通過一個配置檔案就可以將平常用到的一些配置記錄下來,但是如果是搭建多臺叢集伺服器部署,當然也可以使用多個配置檔案,但是維護和同步就會比較麻煩。所以配置服務一般分兩種情況:
1.多臺伺服器叢集使用同一配置,比如:資料庫資訊
2.不同的伺服器叢集使用不同的配置,比如:開發、測試、生產環境使用的資料庫不一樣
Spring Cloud的解決方案是, 將這些配置檔案放到版本管理伺服器裡面,Spring Cloud預設配置使用GIT中。所有Web服務均從GIT中獲取這些配置檔案。由於GIT伺服器與具體Web伺服器之間不需要共享儲存, 只要網路可達就行,從而可以實現Web服務於配置資訊的存放位置的解耦。
Spring Cloud統一控制應用和GIT服務的互動,應用只需要按照Spring Cloud的規範配置GIT的URL即可。 使用GIT後,場景2和場景1的區別僅僅是,場景2中不同的client使用不同版本的配置檔案,但應用但訪問的檔案看起來是會是同一個。Spring Cloud的配置服務結構入下圖:
一、建立Maven工程ConfigServer(使用IDEA工具建立Maven工程)
(1)File--New--Probject--Maven
專案資訊填寫完成後點選Next,然後Fishing。
(2)pom檔案配置如下:
<?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.springcloud.study</groupId> <artifactId>ConfigServer</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>springcloud.config.server</name> <description>Demo Config Server</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!--eureka server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <!-- spring boot test--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project>
(3)建立Config Server,它也是一個Spring Boot應用,@EnableConfigServer註解說明了一個Config Server。同樣我們使用@EnableEurekaClient將它註冊到服務中心。
(4)建立配置檔案application.yml
在resources下建立配置檔案application.yml,配置內容臺下:
Git:
uri:可以是任何程式碼管理工具的上的地址
searchPaths:專案路徑
碼雲專案截圖:
配置檔案內容如下:
(5)啟動ConfigServer,訪問http://localhost:8888/aa/xx, 可見如下響應。這個是輸出是並沒有包括具體配置檔案的內容, 這個響應說明,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版本庫中有一個配置檔案 SpringCloud/ConfigServer/config-server-dev.properties. 那麼訪問http://localhost:8888/config-server-dev.properties就可以顯示配置檔案內容。這個例子中, application的名字是"config-client"(也是下面我們即將建立的client), profile名字是dev, 檔案字尾是.properties。
二、建立ConfigClient工程
(1)File--New--Probject--Maven
專案資訊填寫完成後點選Next,然後Fishing。
(2)pom檔案配置如下:
<?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.springcloud.stydu</groupId>
<artifactId>ConfigClient</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Springcloud.config.client</name>
<packaging>jar</packaging>
<description>Demo Spring Config Client</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
(3)建立ConfigClientApplication
這個應用非常簡單,就是從遠端伺服器(碼雲)專案SpringCloud路徑下ConfigServer資料夾中獲取配置項hello的值,ConfigClient向ConfigServer提交REST請求後,ConfigServer將訪問GIT伺服器,並將取得的配置項hello的值返回給ConfigClient.
(4)建立applicaltion.yml檔案
這個配置定義了應用的名字是config-client(這就是將要用於組裝前面ConfigServer中題到的application), profile採用dev, GIT分支用master。url是ConfigServer的地址。那麼問題來了,我們似乎沒定義配置檔名, 那配置檔名是什麼呢? 這點又體現了約定優於配置的思路,這裡Spring Cloud約定, 應用的配置檔名以如下方式組成:{application}-{profile}.properties(或者{application}-{profile}.yml)。比如我們這個應用的配置檔案就是config-client-dev.properties. 所以只需要在GIT的中建立配置檔案SpringCloud/ConfigServer/config-client-dev.properties就可以了, 內容如下:
(5)啟動ConfigClient應用, 訪問http://locahost/8881/hello, 可以看到,應用本身並沒有直接配置hello的具體內容,也沒指定具體配置檔案,所有這些都由Spring Cloud框架提交給ConfigServer了