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
中的 Spring Cloud Build 的spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
文件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
中的 Spring Cloud Build 的spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
文件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 >