2021-05-12 14:32:11
基於GitHub搭建SrpingCloudConfig詳解
最近在看SpringCloud,為了幫助自己學習和記憶,所以寫下這篇文章。
從SpringCloud官方文件上看SpringCloudConfig其實為我們提供設定外部化的一個服務,可以理解成就是個web服務,我們通過請求到web服務上獲取我們所需要的組態檔。
我們首先在github上建立一個專案,然後建立幾個組態檔
我建立了3個組態檔,分別對應開發,測試和生產三個環境,
我們組態檔建好之後,開始建立SpringCloudConfig服務
我先放一下我的專案結構,不然pom.xml有些小夥伴可能不理解
my-spring-cloud就是最外層專案的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>jipeng.com</groupId>
<artifactId>my_spring_cloud</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>my_spring_cloud_config_service</module>
<module>my_spring_cloud_config_client</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.13.RELEASE</version>
</parent>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR3</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
</pluginRepository>
</pluginRepositories>
<name>my_spring_cloud</name>
</project>
這裡我們比正常的springboot專案多了一個 spring-cloud-dependencies
這是SpringCloud主包,後面我們SpringCloudConfig的包需要依賴這個,所以版本問題大家需要注意。
下面看下我們my_spring_cloud_config_service專案的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">
<parent>
<artifactId>my_spring_cloud</artifactId>
<groupId>jipeng.com</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>my_spring_cloud_config_service</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
</project>
很簡單比我們正常的web專案多了一個 spring-cloud-config-server
下面再看下我們 spring-cloud-config-server 的application.properties 檔案
#伺服器端口
server.port=8091
#服務名稱
spring.application.name=configService
#服務對應的git地址,就是你git專案地址,你clone的那個地址
spring.cloud.config.server.git.uri=https://github.com/xxx/xxx.git
#git倉庫地址下的相對地址,可以設定多個,用,分割。
spring.cloud.config.server.git.search-paths=/**
#組態檔所在的分支
spring.cloud.config.label=master
#git倉庫使用者名稱
spring.cloud.config.username=xxx
#git倉庫密碼
spring.cloud.config.password=xxx
我們建立一個 ConfigServiceApplication 程式碼如下
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
/**
* @Author: jipeng
* @Description:
* @Date: Created in 2018/6/7 7:54
*/
@EnableConfigServer
@SpringBootApplication
public class ConfigServiceApplication {
public static void main(String[] args){
SpringApplication.run(ConfigServiceApplication.class,args);
}
}
比正常的web專案多了一個 EnableConfigServer 註解,這是一個SpringCloud註解,有了這個註解及時告訴專案這是一個設定服務。好了,到此我們的設定服務已經好了,我們可以啟動專案通過postman來檢驗下我們的成果
看下我們的請求地址 http://localhost:8091/configTestService/dev
再看下github中的組態檔
大家是不是發現了什麼
/configTestService/dev 就是根據我們github中的組態檔名來的 configTestService 為我們的應用名稱 dev 為 環境
現在config伺服器端搭好了,我們搭建用戶端
用戶端的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">
<parent>
<artifactId>my_spring_cloud</artifactId>
<groupId>jipeng.com</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>my_spring_cloud_config_client</artifactId>
<dependencies>
<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>
</dependencies>
<build>
<finalName>my_spring_cloud_config_client</finalName>
</build>
</project>
比正常的web多了一個 spring-cloud-starter-config
用戶端的application.properties 就兩個設定
server.port:8081
spring.applicaton.name=configclient
用戶端多了一個bootstrap的組態檔,裡面設定的是SpringCloudConfig的相關設定
#設定應用名稱
spring.cloud.config.name=configTestService
#組態檔的版本
spring.cloud.config.profile=test
#設定服務的地址
spring.cloud.config.uri=http://localhost:8091/
#組態檔所在的分支
spring.cloud.config.label=master
建立一個 WebApplication ,程式碼如下
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @Author: jipeng
* @Description:
* @Date: Created in 2018/6/8 7:03
*/
@SpringBootApplication
public class WebApplication {
public static void main(String[] args){
SpringApplication.run(WebApplication.class,args);
}
}
我們建立一個 TestController
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: jipeng
* @Description:
* @Date: Created in 2018/6/8 7:52
*/
@RestController
public class TestController {
@Value("${configtest.version}")
private String version;
@RequestMapping("/test")
public String from() {
return this.version;
}
}
都加好了我們啟動專案,留意下啟動日記,就是啟動日記剛開始列印的時候
2018-06-10 21:45:07.420 INFO 8376 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://localhost:8091/
2018-06-10 21:45:11.347 INFO 8376 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=configTestService, profiles=[dev], label=master, version=9d66adb8d2b7ace9e4933177051b167a7ef49c1a, state=null
2018-06-10 21:45:11.348 INFO 8376 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource [name='configService', propertySources=[MapPropertySource {name='configClient'}, MapPropertySource {name='https://github.com/jploveslife/springcloudtest.git/configTestService-dev.properties'}]]
2018-06-10 21:45:11.352 INFO 8376 --- [ main] com.ji.WebApplication : No active profile set, falling back to default profiles: default
2018-06-10 21:45:11.369 INFO 8376 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@3a5ecce3: startup date [Sun Jun 10 21:45:11 CST 2018]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@10db82ae
2018-06-10 21:45:11.855 INFO 8376 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=0537ae00-a03a-35d0-830a-1277fd4d74d0
2018-06-10 21:45:11.913 INFO 8376 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$4fec7b02] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
我會發現剛啟動的時候是使用我們的設定服務去獲取的組態檔,這裡面的原理下次講
我們來通過postman驗證下,看設定有沒有過來,我們請求test介面
返回1.0.0 和我們組態檔中一直,說明設定生效了。
到此就結束了,沒講多少,都是直接上的程式碼,希望這個文章對大家了解SpringCloudConfig有所幫助。實際生產中比這個複雜,大家可以通過不同的場景搭建不同的設定服務。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址:https://www.linuxidc.com/Linux/2018-06/152814.htm
相關文章