日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

使用Spring Cloud Config作为外部化配置

發(fā)布時(shí)間:2023/12/3 javascript 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Spring Cloud Config作为外部化配置 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

關(guān)于連續(xù)交付 ,最重要的實(shí)踐之一是只構(gòu)建一次二進(jìn)制文件,并在不同的環(huán)境(開發(fā),測試,驗(yàn)收等)中使用該二進(jìn)制文件 。 這意味著最有可能需要外部化應(yīng)用程序的配置 。 對(duì)于Spring Boot應(yīng)用程序,將其屬性值保留在application jar之外的application.properties中 。 這樣,您可以將同一jar用于不同環(huán)境的部署(一種替代方法是,將所有可能環(huán)境的屬性值打包到j(luò)ar中,但在大多數(shù)情況下,我不認(rèn)為這是一種好習(xí)慣)。
尤其是在構(gòu)建和部署Spring Boot應(yīng)用程序時(shí),您應(yīng)該查看一下Spring Cloud Config項(xiàng)目。 在這篇文章中,我將按照此處描述的步驟進(jìn)行操作,您將僅需幾個(gè)步驟就可以了解如何設(shè)置自己的配置服務(wù)。
在展示如何進(jìn)行設(shè)置之前,先對(duì)體系結(jié)構(gòu)進(jìn)行概述:

  • Git存儲(chǔ)庫用于存儲(chǔ)配置值。 為此,Git是絕佳的選擇,因?yàn)樗哂懈櫤痛鎯?chǔ)更改的功能。
  • DevOps(或想要更改配置的任何系統(tǒng))可以通過將其更改推送到Git存儲(chǔ)庫中來簡單地更改配置值。
  • 配置服務(wù)與Git存儲(chǔ)庫保持同步,并根據(jù)要求發(fā)布配置值。
  • 這些服務(wù)充當(dāng)配置客戶端,可以從配置服務(wù)請(qǐng)求配置值。

要使其在本地計(jì)算機(jī)上運(yùn)行,??請(qǐng)執(zhí)行以下步驟:

  • 設(shè)置Git倉庫
  • 設(shè)置配置服務(wù)
  • 設(shè)置客戶服務(wù)
  • 測試設(shè)置

最簡單的方法是創(chuàng)建一個(gè)目錄“ spring-config-example”,其中將包含此演示所需的所有代碼。 這將被視為該帖子的根目錄。

設(shè)置Git倉庫
在這一步中,我創(chuàng)建一個(gè)屬性文件,并將其放入(本地)Git存儲(chǔ)庫中。 然后,該屬性文件將用作我們的演示客戶端應(yīng)用程序的屬性值的源。
首先創(chuàng)建一個(gè)新目錄“ configstore”,然后在該目錄中創(chuàng)建一個(gè)名為“ a-bootiful-client.properties”的新文件。 將以下內(nèi)容添加到文件中:

server.port=8000 message = Hello Worldmanagement.security.enabled=false

接下來使用命令創(chuàng)建一個(gè)git repo
' git init '并將文件添加并提交到本地倉庫
' git commit -a -m 'initial commit' ' 這就是步驟。

設(shè)置配置服務(wù)
如前所述,該服務(wù)只是另一個(gè)Spring Boot項(xiàng)目。 要設(shè)置項(xiàng)目,我創(chuàng)建了一個(gè)新的子目錄,并使用以下布局將“默認(rèn)” Spring Boot項(xiàng)目放入其中:

├── pom.xml └── src└── main├── java│?? └── net│?? └── pascalalma│?? └── cloud│?? └── ConfigServiceApplication.java└── resources└── application.properties

“ pom.xml”具有以下內(nèi)容:

<?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>net.pascalalma.cloud</groupId><artifactId>configuration-service</artifactId><version>1.0.0-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Camden.SR5</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> </project>

對(duì)于Spring Boot項(xiàng)目而言,這是相當(dāng)簡單的pom。 唯一增加的依賴性是“ spring-cloud-config-server”的依賴性。
Application類如下所示:

package net.pascalalma.cloud;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer;@EnableConfigServer @SpringBootApplication public class ConfigServiceApplication {public static void main(String[] args) {SpringApplication.run(ConfigServiceApplication.class, args);} }

唯一不同的是注釋“ EnableConfigServer”,該注釋使此Spring Boot應(yīng)用程序充當(dāng)配置服務(wù)器。
最后是application.properties,其中包含以下內(nèi)容:

server.port=8888 spring.cloud.config.server.git.uri=/Users/pascalalma/projects/sandbox/spring-config-example/configstore

除了定義端口外,我還將uri添加到Git倉庫中,該倉庫保存著要使用的屬性。 如前所述,我在這里使用本地存儲(chǔ)庫,但這當(dāng)然也可以是遠(yuǎn)程Git存儲(chǔ)庫。
這就是服務(wù)器的全部內(nèi)容。 接下來讓我們?cè)O(shè)置客戶端應(yīng)用程序。

設(shè)置客戶服務(wù)
為了設(shè)置客戶端項(xiàng)目,我創(chuàng)建了一個(gè)新的子目錄,并使用以下布局將另一個(gè)“默認(rèn)” Spring Boot項(xiàng)目放入其中:

├── pom.xml └── src└── main├── java│?? └── hello│?? └── ConfigClientApplication.java└── resources└── bootstrap.properties

如您所見,該項(xiàng)目與另一個(gè)項(xiàng)目一樣簡單。 它包含一個(gè)pom,一個(gè)Java文件和一個(gè)屬性文件。 讓我們通過每個(gè)。
“ pom.xml”包含以下內(nèi)容:

<?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>net.pascalalma.cloud</groupId><artifactId>configuration-client</artifactId><version>1.0.0-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Camden.SR5</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> </project>

接下來是Java文件。 它實(shí)際上包含兩個(gè)類:啟動(dòng)Spring Boot的應(yīng)用程序和處理傳入HTTP請(qǐng)求的Controller。 該文件如下所示:

package net.pascalalma.cloud.client;import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;@SpringBootApplication public class ConfigClientApplication {public static void main(String[] args) {SpringApplication.run(ConfigClientApplication.class, args);} }@RefreshScope @RestController class MessageRestController {@Value("${message:Hello default}")private String message;@RequestMapping("/message")String getMessage() {return this.message;} }

添加RefreshScope是為了能夠稍后在測試中修改屬性時(shí)重新加載它們。
最后一個(gè)文件是“ bootstrap.properties”。 當(dāng)啟動(dòng)該應(yīng)用程序以在啟動(dòng)該應(yīng)用程序之前加載遠(yuǎn)程“ application.properties”時(shí),該文件將由Spring Boot CLient應(yīng)用程序使用。 該文件包含以下內(nèi)容:

spring.application.name=a-bootiful-client spring.cloud.config.uri=http://localhost:8888

我認(rèn)為也不是很復(fù)雜。 它包含客戶端應(yīng)用程序的名稱。 此名稱用于從配置服務(wù)中選擇正確的屬性文件。 第二行包含云配置服務(wù)器的位置。 您可以在此處了解更多信息。

測試設(shè)置
現(xiàn)在有了所有代碼,我可以檢查它是否有效。 我打開三個(gè)終端會(huì)話。
我第一個(gè)導(dǎo)航到“ configuration-server”目錄,并執(zhí)行“ mvn spring-boot:run ”以啟動(dòng)配置服務(wù)器。 第二個(gè)我導(dǎo)航到“ configuration-client”目錄并執(zhí)行“ mvn spring-boot:run ”以啟動(dòng)配置客戶端。 我用來打電話給客戶端以測試配置服務(wù)器的第三個(gè)。 當(dāng)我執(zhí)行命令' curl localhost:8000/message '時(shí),我希望得到返回的消息,該消息是我在第一步中放入configstore的:

$ curl localhost:8000/message Hello World!

現(xiàn)在,當(dāng)我對(duì)配置存儲(chǔ)進(jìn)行更改時(shí),它不會(huì)自動(dòng)反映在客戶端中。 我編輯文件“ a-bootiful-client.properties”,并將消息更新為:
message = Hello World from Spring Boot!\n\n 。 當(dāng)然,使用' git commit -a -m 'updated message' '將文件提交到存儲(chǔ)庫中
當(dāng)我在客戶端應(yīng)用程序上執(zhí)行相同的curl命令時(shí),不會(huì)有任何更改。 如果我直接在配置服務(wù)器上卷曲消息,則可以看到更改:

$ curl localhost:8888/a-bootiful-client/default {"name":"a-bootiful-client" ,"profiles":"default"] ,"label":"master" ,"version":"98c6f8d8dd9a9b2cb36496ca4ac54ffb35806dbc" ,"state":null ,"propertySources":[{"name":"/Users/pascalalma/projects/sandbox/spring-config-example/configstore/a-bootiful-client.properties","source":{"server.port":"8000","management.security.enabled":"false","message":"Hello World from Spring Boot!\n\n"}}] }

要將更改后的值從配置服務(wù)器獲取到客戶端,我需要使用以下命令刷新客戶端:
'curl -X POST http://localhost:8000/refresh ' 。 如果現(xiàn)在我卷曲客戶端,則會(huì)看到預(yù)期的更新消息:

$ curl localhost:8000/message Hello World from Spring Boot!

您可能已經(jīng)注意到,此演示的'application.properties'中的'management.security.enabled'屬性設(shè)置為false。 這是為了使其易于測試(默認(rèn)情況下,自Spring Boot 1.5起,Actuator端點(diǎn)默認(rèn)是安全的)

這篇文章中顯示的功能實(shí)際上只是冰山一角。 與其他工具(如Spring Cloud Consul和Spring Cloud Bus)結(jié)合使用 ,還可以實(shí)現(xiàn)更多功能,還可以與標(biāo)準(zhǔn)的Spring功能(如security和Profiles)結(jié)合使用 。 這篇文章應(yīng)該足夠讓您開始自己檢查一下。

翻譯自: https://www.javacodegeeks.com/2017/04/use-spring-cloud-config-externalized-configuration.html

總結(jié)

以上是生活随笔為你收集整理的使用Spring Cloud Config作为外部化配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。