Spring Cloud Config Server 有以下優勢:
用於外部設定的基於 HTTP 資源的 API(名稱-值對或等效的 YAML 內容)
加密和解密屬性值(對稱或非對稱)
使用@EnableConfigServer
可以輕鬆嵌入到 Spring Boot 應用程式中
專門針對 Spring 應用程序,Spring Cloud Config Client 允許您:
綁定到配置伺服器並使用遠端屬性來源初始化 Spring Environment
。
加密和解密屬性值(對稱或非對稱)。
@RefreshScope
用於希望在配置更改時重新初始化的 Spring @Beans
。
使用管理端點:
/env
用於更新Environment
並重新綁定@ConfigurationProperties
和日誌等級。
/refresh
用於刷新@RefreshScope
beans。
/restart
用於重新啟動 Spring 上下文(預設為停用)。
/pause
和/resume
用於呼叫Lifecycle
方法( ApplicationContext
上的stop()
和start()
)。
引導應用程式上下文:主應用程式的父上下文,可以訓練它執行任何操作(預設情況下,它綁定到配置伺服器並解密屬性值)。
您可以在此處找到範例應用程式。它是一個 Spring Boot 應用程序,因此您可以使用常用機制(例如mvn spring-boot:run
)來運行它。當它運行時,它會在http://localhost:8888
(可配置的預設值)上找到配置伺服器,因此您也可以運行該伺服器以查看它們一起工作。
此範例有一個測試案例,其中配置伺服器也在同一 JVM(使用不同的連接埠)中啟動,並且測試斷言 git 配置儲存庫中的環境屬性存在。若要變更配置伺服器的位置,您可以在bootstrap.yml
(或系統屬性和其他位置)中設定spring.cloud.config.uri
。
測試案例有一個main()
方法,它以相同的方式運行伺服器(觀察其連接埠的日誌),因此您可以在一個進程中運行整個系統並使用它(例如,您可以運行main()
IDE 中的方法)。 main()
方法使用target/config
作為 git 儲存庫的工作目錄,因此您可以在那裡進行本機變更並查看它們反映在正在運行的應用程式中。以下範例顯示了修改測試案例的會話:
$curl 本機:8080/env/sample 我的測試 $ vi 目標/config/mytest.properties ..更改「sample」的值,可選擇提交 $curl -X POST 本機:8080/刷新 [“樣本”] $curl 本機:8080/env/sample 樣本值
刷新端點報告“sample”屬性已更改。
要建置原始程式碼,您需要安裝 JDK 17。
Spring Cloud 使用 Maven 進行大多數與建置相關的活動,您應該能夠透過複製您感興趣的專案並輸入來快速開始工作
$ ./mvnw 安裝
筆記 | 您也可以自行安裝 Maven (>=3.3.3) 並執行mvn 命令來取代下面範例中的./mvnw 。如果您這樣做,如果您的本機 Maven 設定不包含 spring 預發布工件的儲存庫聲明,您可能還需要新增-P spring 。 |
筆記 | 請注意,您可能需要透過將MAVEN_OPTS 環境變數設定為-Xmx512m -XX:MaxPermSize=128m 之類的值來增加 Maven 可用的記憶體量。我們嘗試在.mvn 配置中涵蓋這一點,因此如果您發現必須這樣做才能成功構建,請提出請求以將設定添加到原始程式碼管理中。 |
需要中間件(即Redis)進行測試的專案通常需要安裝並執行[Docker](https://www.docker.com/get-started)的本機實例。
spring-cloud-build 模組有一個「docs」設定文件,如果您開啟它,它將嘗試使用來自modules/ROOT/
Antora 建立 asciidoc 來源。
作為該過程的一部分,它將查找docs/src/main/asciidoc/README.adoc
並通過加載所有包含內容來處理它,但不解析或渲染它,只是將其複製到${main.basedir}
(默認為${basedir}
,即專案的根目錄)。如果 README 中有任何更改,它將在 Maven 建置後作為修改後的檔案顯示在正確的位置。只需提交並推動更改即可。
如果您沒有 IDE 偏好,我們建議您在處理程式碼時使用 Spring Tools Suite 或 Eclipse。我們使用 m2eclipse eclipse 外掛程式來提供 Maven 支援。其他 IDE 和工具只要使用 Maven 3.3.3 或更高版本,也應該可以正常運作。
Spring Cloud 專案需要啟動「spring」Maven 設定檔才能解析 spring 里程碑和快照儲存庫。使用您首選的 IDE 將此設定檔設定為活動狀態,否則您可能會遇到建置錯誤。
使用 eclipse 時,我們建議使用 m2eclipse eclipse 外掛程式。如果您尚未安裝 m2eclipse,則可以從「eclipse market」取得它。
筆記 | 舊版的 m2e 不支援 Maven 3.3,因此將專案匯入 Eclipse 後,您還需要告訴 m2eclipse 對專案使用正確的設定檔。如果您在專案中看到許多與 POM 相關的不同錯誤,請檢查您是否安裝了最新版本。如果您無法升級 m2e,請將「spring」設定檔新增至您的settings.xml 中。或者,您可以將儲存庫設定從父 pom 的「spring」設定檔複製到您的settings.xml 中。 |
如果您不想使用 m2eclipse,可以使用下列命令產生 eclipse 專案元資料:
$ ./mvnw eclipse:eclipse
可以透過從file
選單中選擇import existing projects
來匯入產生的 Eclipse 專案。
如果您因「非法金鑰大小」而出現異常,且您使用的是 Sun 的 JDK,則需要安裝 Java 加密擴充功能 (JCE) 無限強度管轄區策略檔案。請參閱以下連結以了解更多資訊:
Java 6 JCE
Java 7 JCE
Java 8 JCE
將 JCE 檔案提取到您使用的 JRE/JDK x64/x86 版本的JDK/jre/lib/security
資料夾中。
Spring Cloud 在非限制性 Apache 2.0 授權下發布,並遵循非常標準的 Github 開發流程,使用 Github 追蹤器處理問題並將拉取請求合併到 main 中。如果您想貢獻一些微不足道的東西,請不要猶豫,但請遵循以下準則。
在我們接受重要的補丁或拉取請求之前,我們需要您簽署貢獻者授權協議。簽署貢獻者協議並不授予任何人對主儲存庫的提交權,但這確實意味著我們可以接受您的貢獻,如果我們這樣做,您將獲得作者信用。活躍的貢獻者可能會被要求加入核心團隊,並被賦予合併拉取請求的能力。
該項目遵守貢獻者契約行為準則。透過參與,您應該遵守此準則。請將不可接受的行為回報給 [email protected]。
這些對於拉取請求來說都不是必要的,但它們都會有所幫助。它們也可以在原始拉取請求之後、合併之前新增。
使用 Spring 框架程式碼格式約定。如果您使用 Eclipse,則可以使用 Spring Cloud Build 專案中的eclipse-code-formatter.xml
檔案匯入格式化程式設定。如果使用 IntelliJ,您可以使用 Eclipse Code Formatter 外掛程式匯入相同的檔案。
確保所有新的.java
檔案都有一個簡單的 Javadoc 類別註釋,其中至少有一個@author
標記來標識您,並且最好至少有一段說明該類別的用途。
將 ASF 授權頭註釋新增至所有新的.java
檔案(從專案中的現有檔案複製)
將自己作為@author
添加到您進行重大修改(不僅僅是外觀更改)的 .java 檔案中。
添加一些 Javadocs,如果更改命名空間,也添加一些 XSD 文件元素。
一些單元測試也會有很大幫助——必須有人來做。
如果沒有其他人在使用您的分支,請根據目前主分支(或主專案中的其他目標分支)重新調整其基礎。
編寫提交訊息時請遵循以下約定,如果您要修復現有問題,請在提交訊息末尾新增Fixes gh-XXXX
(其中 XXXX 是問題編號)。
Spring Cloud Build 附帶了一組 checkstyle 規則。您可以在spring-cloud-build-tools
模組中找到它們。此模組下最值得注意的檔案是:
└── 來源 ├── 格子風格 │ └── checkstyle-suppressions.xml (3) └── 主要 └── 資源 ├── checkstyle-header.txt (2) └── checkstyle.xml (1)
預設 Checkstyle 規則
文件頭設定
預設抑制規則
預設情況下禁用Checkstyle 規則。要將 checkstyle 新增到您的專案中,只需定義以下屬性和插件。
<屬性> <maven-checkstyle-plugin.failsOnError>true</maven-checkstyle-plugin.failsOnError> (1) <maven-checkstyle-plugin.failsOnViolation>true </maven-checkstyle-plugin.failsOnViolation> (2) <maven-checkstyle-plugin.includeTestSourceDirectory>true </maven-checkstyle-plugin.includeTestSourceDirectory> (3) </屬性> <建置> <外掛> <插件> (4) <groupId>io.spring.javaformat</groupId> <artifactId>spring-javaformat-maven-plugin</artifactId> </插件> <插件> (5) <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> </插件> </插件> <報告> <外掛> <插件> (5) <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> </插件> </插件> </報告> </構建>
由於 Checkstyle 錯誤而導致構建失敗
因 Checkstyle 違規而導致建置失敗
Checkstyle 也分析測試源
添加 Spring Java Format 插件,該插件將重新格式化您的程式碼以透過大多數 Checkstyle 格式化規則
將 checkstyle 外掛程式新增到您的建置和報告階段
如果您需要抑制某些規則(例如,行長度需要更長),那麼您只需在${project.root}/src/checkstyle/checkstyle-suppressions.xml
下定義一個包含抑制的檔案就足夠了。例子:
<?xml 版本=“1.0”?> <!DOCTYPE 抑制 PUBLIC “-//小狗爬行//DTD 抑制 1.1//EN” “https://www.puppycrawl.com/dtds/suppressions_1_1.dtd”> <抑制> <抑制檔案=“.*ConfigServerApplication.java”檢查=“HideUtilityClassConstructor”/> <抑製檔案=“.*ConfigClientWatch.java”檢查=“LineLengthCheck”/> </抑制>
建議將${spring-cloud-build.rootFolder}/.editorconfig
和${spring-cloud-build.rootFolder}/.springformat
複製到您的專案中。這樣,將會套用一些預設的格式規則。您可以透過執行以下腳本來執行此操作:
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/.editorconfig -o .editorconfig
$ touch .springformat
為了設定 Intellij,您應該匯入我們的編碼約定、檢查設定檔並設定 checkstyle 外掛程式。在 Spring Cloud Build 專案中可以找到以下文件。
└── 來源 ├── 格子風格 │ └── checkstyle-suppressions.xml (3) └── 主要 └── 資源 ├── checkstyle-header.txt (2) ├── checkstyle.xml (1) └── 智能 ├── Intellij_Project_Defaults.xml (4) └── Intellij_Spring_Boot_Java_Conventions.xml (5)
預設 Checkstyle 規則
文件頭設定
預設抑制規則
Intellij 的專案預設應用了大多數 Checkstyle 規則
應用大多數 Checkstyle 規則的 Intellij 專案樣式約定
前往File
→ Settings
→ Editor
→ Code style
。點選Scheme
部分旁邊的圖示。在那裡,點擊Import Scheme
值並選擇Intellij IDEA code style XML
選項。導入spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml
檔案。
前往File
→ Settings
→ Editor
→ Inspections
。點擊Profile
部分旁邊的圖示。在那裡,點擊導入Import Profile
並導入spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml
檔案。
要讓 Intellij 與 Checkstyle 搭配使用,您必須安裝Checkstyle
插件。建議也安裝Assertions2Assertj
以自動轉換 JUnit 斷言
前往File
→ Settings
→ Other settings
→ Checkstyle
。點選Configuration file
部分中的+
圖示。在那裡,您必須定義應從何處選擇檢查樣式規則。在上圖中,我們從複製的 Spring Cloud Build 儲存庫中選擇了規則。但是,您可以指向 Spring Cloud Build 的 GitHub 儲存庫(例如,對於checkstyle.xml
: https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/main/resources/checkstyle.xml
://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/ https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/main/resources/checkstyle.xml
)。我們需要提供以下變數:
checkstyle.header.file
- 請將其指向克隆儲存庫中或透過https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
網址。
checkstyle.suppressions.file
- 預設抑制。請將其指向克隆儲存庫中或透過https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
URL。
checkstyle.additional.suppressions.file
- 此變數對應於本機專案中的抑制。例如,您正在開發spring-cloud-contract
。然後指向project-root/src/checkstyle/checkstyle-suppressions.xml
資料夾。 spring-cloud-contract
的範例為: /home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml
。
重要的 | 請記住將Scan Scope 設為All sources 因為我們對生產和測試來源套用檢查樣式規則。 |
Spring Cloud Build 帶來了basepom:duplicate-finder-maven-plugin
,它可以在 java 類別路徑上標記重複和衝突的類別和資源。
預設情況下,重複查找器處於啟用狀態,並將在 Maven 建置的verify
階段運行,但只有在將duplicate-finder-maven-plugin
新增至專案pom.xml
的build
部分時,它才會在您的專案中生效。
< build >
< plugins >
< plugin >
< groupId >org.basepom.maven</ groupId >
< artifactId >duplicate-finder-maven-plugin</ artifactId >
</ plugin >
</ plugins >
</ build >
對於其他屬性,我們已設定插件文件中列出的預設值。
您可以輕鬆地覆寫它們,但設定以duplicate-finder-maven-plugin
為前綴的所選屬性的值。例如,將duplicate-finder-maven-plugin.skip
設為true
以便在建置中跳過重複項檢查。
如果您需要將ignoredClassPatterns
或ignoredResourcePatterns
新增至您的設定中,請確保將它們新增至專案的插件設定部分:
< build >
< plugins >
< plugin >
< groupId >org.basepom.maven</ groupId >
< artifactId >duplicate-finder-maven-plugin</ artifactId >
< configuration >
< ignoredClassPatterns >
< ignoredClassPattern >org.joda.time.base.BaseDateTime</ ignoredClassPattern >
< ignoredClassPattern >.*module-info</ ignoredClassPattern >
</ ignoredClassPatterns >
< ignoredResourcePatterns >
< ignoredResourcePattern >changelog.txt</ ignoredResourcePattern >
</ ignoredResourcePatterns >
</ configuration >
</ plugin >
</ plugins >
</ build >