3.0.2-SNAPSHOT
本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springboot.io - Spring Boot中文社区 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。 |
1. 使用文档
Spring Cloud CircuitBreaker 项目包含 Resilience4J 和 Spring Retry 的实现。Spring Cloud CircuitBreaker 中实现的 API 在 Spring Cloud Commons 中存在。这些API的使用文档位于 Spring Cloud Commons 文档 中。
1.1. 配置 Resilience4J Circuit Breakers
1.1.1. Starter
Resilience4J 的实现有两个 starter,一个用于 Reactive (响应式)应用,一个用于非 Reactive 应用。
-
org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j
- 非 Reactive 应用。 -
org.springframework.cloud:spring-cloud-starter-circuitbreaker-reactor-resilience4j
- Reactive (响应式)应用。
1.1.2. 自动配置
你可以通过将 spring.cloud.circuitbreaker.resilience4j.enabled
设置为 false
来禁用 Resilience4J 的自动配置。
1.1.3. 默认配置
为了给所有的 circuit breakers(熔断器)提供一个默认的配置,创建一个 Customizer
bean,它被传递给 Resilience4JCircuitBreakerFactory
或 ReactiveResilience4JCircuitBreakerFactory
。configureDefault
方法可以用来提供一个默认配置。
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> defaultCustomizer() {
return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
.timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(4)).build())
.circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
.build());
}
Reactive 示例
@Bean
public Customizer<ReactiveResilience4JCircuitBreakerFactory> defaultCustomizer() {
return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
.circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
.timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(4)).build()).build());
}
自定义 ExecutorService
如果你想配置执行 circuit breaker 的 ExecutorService
,你可以使用 Resilience4JCircuitBreakerFactor
进行配置。
例如,如果你想使用一个 context 感知的 ExecutorService
,你可以这样做。
@Bean
public Customizer<ReactiveResilience4JCircuitBreakerFactory> defaultCustomizer() {
return factory -> {
ContextAwareScheduledThreadPoolExecutor executor = ContextAwareScheduledThreadPoolExecutor.newScheduledThreadPool().corePoolSize(5)
.build();
factory.configureExecutorService(executor);
};
}
1.1.4. 特定的 Circuit Breaker 配置
与提供默认配置类似,你可以创建一个 Customizer
bean,它被传递给 Resilience4JCircuitBreakerFactory
或 ReactiveResilience4JCircuitBreakerFactory
。
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> slowCustomizer() {
return factory -> factory.configure(builder -> builder.circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
.timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(2)).build()), "slow");
}
除了配置被创建的 circuit breaker 外,你还可以在 circuit breaker 被创建后但被返回给调用者之前对其进行自定义。要做到这一点,你可以使用 addCircuitBreakerCustomizer
方法。这对于向 Resilience4J circuit breaker 添加 event handler 很有用。
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> slowCustomizer() {
return factory -> factory.addCircuitBreakerCustomizer(circuitBreaker -> circuitBreaker.getEventPublisher()
.onError(normalFluxErrorConsumer).onSuccess(normalFluxSuccessConsumer), "normalflux");
}
Reactive 示例
@Bean
public Customizer<ReactiveResilience4JCircuitBreakerFactory> slowCustomizer() {
return factory -> {
factory.configure(builder -> builder
.timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(2)).build())
.circuitBreakerConfig(CircuitBreakerConfig.ofDefaults()), "slow", "slowflux");
factory.addCircuitBreakerCustomizer(circuitBreaker -> circuitBreaker.getEventPublisher()
.onError(normalFluxErrorConsumer).onSuccess(normalFluxSuccessConsumer), "normalflux");
};
}
1.1.5. Circuit Breaker Properties 配置
你可以在你的应用程序的配置 properties 文件中配置 CircuitBreaker
和 TimeLimiter
的配置或实例。属性配置比 Java Customizer
配置具有更高的优先级。
从上到下的优先级递减。
-
Method(id) 配置 - 具体方法或操作上
-
Service(group) 配置 - 特定的应用服务或操作上
-
全局默认配置
ReactiveResilience4JCircuitBreakerFactory.create(String id, String groupName)
Resilience4JCircuitBreakerFactory.create(String id, String groupName)
全局默认 Properties 配置
resilience4j.circuitbreaker:
configs:
default:
registerHealthIndicator: true
slidingWindowSize: 50
resilience4j.timelimiter:
configs:
default:
timeoutDuration: 5s
cancelRunningFuture: true
配置 Properties 配置
resilience4j.circuitbreaker:
configs:
groupA:
registerHealthIndicator: true
slidingWindowSize: 200
resilience4j.timelimiter:
configs:
groupC:
timeoutDuration: 3s
cancelRunningFuture: true
实例 Properties 配置
resilience4j.circuitbreaker:
instances:
backendA:
registerHealthIndicator: true
slidingWindowSize: 100
backendB:
registerHealthIndicator: true
slidingWindowSize: 10
permittedNumberOfCallsInHalfOpenState: 3
slidingWindowType: TIME_BASED
recordFailurePredicate: io.github.robwin.exception.RecordFailurePredicate
resilience4j.timelimiter:
instances:
backendA:
timeoutDuration: 2s
cancelRunningFuture: true
backendB:
timeoutDuration: 1s
cancelRunningFuture: false
-
ReactiveResilience4JCircuitBreakerFactory.create("backendA")
或Resilience4JCircuitBreakerFactory.create("backendA")
会应用instances backendA properties
-
ReactiveResilience4JCircuitBreakerFactory.create("backendA", "groupA")
或Resilience4JCircuitBreakerFactory.create("backendA", "groupA")
会应用instances backendA properties
-
ReactiveResilience4JCircuitBreakerFactory.create("backendC")
或Resilience4JCircuitBreakerFactory.create("backendC")
会应用global default properties
-
ReactiveResilience4JCircuitBreakerFactory.create("backendC", "groupC")
或Resilience4JCircuitBreakerFactory.create("backendC", "groupC")
会应用global default CircuitBreaker properties and config groupC TimeLimiter properties
关于 Resilience4j 属性配置的更多信息,见 Resilience4J Spring Boot 2 配置 。
1.1.6. Bulkhead pattern 支持
如果 classpath 上有 resilience4j-bulkhead
,Spring Cloud CircuitBreaker 将用 Resilience4j Bulkhead 来包装所有方法。你可以通过设置 spring.cloud.circuitbreaker.bulkhead.resilience4j.enabled
为 false
来禁用 Resilience4j Bulkhead。
Spring Cloud CircuitBreaker Resilience4j 提供了两种 bulkhead pattern 的实现:
-
使用 Semaphores 的
SemaphoreBulkhead
。 -
一个
FixedThreadPoolBulkhead
,它使用一个有界队列和一个固定的线程池。
默认情况下,Spring Cloud CircuitBreaker Resilience4j 使用 FixedThreadPoolBulkhead
。要修改默认行为以使用 SemaphoreBulkhead
,请将属性 spring.cloud.circuitbreaker.resilience4j.enableSemaphoreDefaultBulkhead
设为 true
。
关于实现 Bulkhead pattern 的更多信息,见 Resilience4j Bulkhead。
Customizer<Resilience4jBulkheadProvider>
可用于提供默认的 Bulkhead 和 ThreadPoolBulkhead
配置。
@Bean
public Customizer<Resilience4jBulkheadProvider> defaultBulkheadCustomizer() {
return provider -> provider.configureDefault(id -> new Resilience4jBulkheadConfigurationBuilder()
.bulkheadConfig(BulkheadConfig.custom().maxConcurrentCalls(4).build())
.threadPoolBulkheadConfig(ThreadPoolBulkheadConfig.custom().coreThreadPoolSize(1).maxThreadPoolSize(1).build())
.build()
);
}
1.1.7. 特定的 Bulkhead 配置
同样地,为了提供一个默认的 'Bulkhead' 或 'ThreadPoolBulkhead' 配置,你可以创建一个 Customizer
Bean,它被传递给 Resilience4jBulkheadProvider
。
@Bean
public Customizer<Resilience4jBulkheadProvider> slowBulkheadProviderCustomizer() {
return provider -> provider.configure(builder -> builder
.bulkheadConfig(BulkheadConfig.custom().maxConcurrentCalls(1).build())
.threadPoolBulkheadConfig(ThreadPoolBulkheadConfig.ofDefaults()), "slowBulkhead");
}
除了配置被创建的 Bulkhead 外,你还可以在 Bulkhead 和线程池 Bulkhead 被创建后但被返回给调用者之前对其进行自定义。要做到这一点,你可以使用 addBulkheadCustomizer
和 addThreadPoolBulkheadCustomizer
方法。
Bulkhead 示例
@Bean
public Customizer<Resilience4jBulkheadProvider> customizer() {
return provider -> provider.addBulkheadCustomizer(bulkhead -> bulkhead.getEventPublisher()
.onCallRejected(slowRejectedConsumer)
.onCallFinished(slowFinishedConsumer), "slowBulkhead");
}
线程池 Bulkhead 示例
@Bean
public Customizer<Resilience4jBulkheadProvider> slowThreadPoolBulkheadCustomizer() {
return provider -> provider.addThreadPoolBulkheadCustomizer(threadPoolBulkhead -> threadPoolBulkhead.getEventPublisher()
.onCallRejected(slowThreadPoolRejectedConsumer)
.onCallFinished(slowThreadPoolFinishedConsumer), "slowThreadPoolBulkhead");
}
1.1.8. Bulkhead Properties 配置
你可以在应用程序的配置 properties 文件中配置 ThreadPoolBulkhead
和 SemaphoreBulkhead
实例。属性配置比 Java Customizer
配置具有更高的优先级。
resilience4j.thread-pool-bulkhead:
instances:
backendA:
maxThreadPoolSize: 1
coreThreadPoolSize: 1
resilience4j.bulkhead:
instances:
backendB:
maxConcurrentCalls: 10
关于 Resilience4j 属性配置的更多信息,见 Resilience4J Spring Boot 2 配置。
1.1.9. 收集指标
Spring Cloud Circuit Breaker Resilience4j 包含自动配置功能,只要 classpath上 有正确的依赖项,就可以设置指标收集。要启用指标收集,你必须包括 org.springframework.boot:spring-boot-starter-actuator
,以及 io.github.resilience4j:resilience4j-micrometer
。关于存在这些依赖时产生的指标的更多信息,请参阅 Resilience4j 文档。
你不必直接包括 micrometer-core ,因为它是由 spring-boot-starter-actuator 引入的。
|
1.2. 配置 Spring Retry Circuit Breakers
Spring Retry为Spring应用程序提供声明式重试支持。这个项目的一个子集包括实现 circuit breaker 功能的能力。Spring Retry 通过它的 CircuitBreakerRetryPolicy
和 stateful retry 的组合来提供 circuit breaker 的实现。所有使用 Spring Retry 创建的 circuit breaker 都将使用 CircuitBreakerRetryPolicy
和 DefaultRetryState
创建。这两个类都可以使用 SpringRetryConfigBuilder
进行配置。
1.2.1. 默认配置
为了给所有的 circuit breaker 提供一个默认的配置,创建一个 Customizer
bean,它被传递给 SpringRetryCircuitBreakerFactory
。configureDefault
方法可以用来提供一个默认配置。
@Bean
public Customizer<SpringRetryCircuitBreakerFactory> defaultCustomizer() {
return factory -> factory.configureDefault(id -> new SpringRetryConfigBuilder(id)
.retryPolicy(new TimeoutRetryPolicy()).build());
}
1.2.2. 特定的 Circuit Breaker 配置
与提供默认配置类似,你可以创建一个 Customizer
bean,它被传递给 SpringRetryCircuitBreakerFactory
。
@Bean
public Customizer<SpringRetryCircuitBreakerFactory> slowCustomizer() {
return factory -> factory.configure(builder -> builder.retryPolicy(new SimpleRetryPolicy(1)).build(), "slow");
}
除了配置被创建的 circuit breaker 外,你还可以在 circuit breaker 被创建后但被返回给调用者之前对其进行自定义。要做到这一点,你可以使用 addRetryTemplateCustomizers
方法。这对于向 RetryTemplate
添加 event handler 很有用。
@Bean
public Customizer<SpringRetryCircuitBreakerFactory> slowCustomizer() {
return factory -> factory.addRetryTemplateCustomizers(retryTemplate -> retryTemplate.registerListener(new RetryListener() {
@Override
public <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback) {
return false;
}
@Override
public <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
}
@Override
public <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
}
}));
}
2. 构建
2.1. 基本的编译和测试
要构建源代码,你需要安装JDK 17。
Spring Cloud使用Maven进行大多数构建相关的活动,通过克隆你感兴趣的项目并键入以下内容,你应该能很快上手
$ ./mvnw install
你也可以自己安装Maven(>=3.3.3),运行 mvn 命令来代替下面例子中的 ./mvnw 。如果你这样做,如果你的本地Maven设置不包含 spring 预发布 artifact 的 repository 声明,你可能还需要添加 -P spring 。
|
请注意,您可能需要通过设置 MAVEN_OPTS 环境变量,如 -Xmx512m -XX:MaxPermSize=128m 来增加Maven的可用内存。我们试图在 .mvn 配置中涵盖这一点,所以如果你发现你必须这样做才能使构建成功,请提出一个raise,将设置添加到 source control 中。
|
需要中间件(如,Redis)进行测试的项目一般需要安装和运行 Docker 的本地实例。
2.2. 文档
spring-cloud-build
模块有一个 "docs" profile,如果你打开它,它将尝试从 src/main/asciidoc
构建 asciidoc 源。作为该过程的一部分,它将寻找 README.adoc,并通过加载所有内容来处理它,但不对其进行解析或渲染,只是将其复制到 ${main.basedir}
(默认为 $C:\Users\KevinBlandy\Desktop\springdoc\spring-cloud-circuitbreaker-doc\docs
,即项目的根目录)。如果README有任何改动,在Maven构建后就会以修改过的文件出现在正确位置。提交并推送修改内容即可。
2.3. 使用代码工作
如果你没有IDE的偏好,我们建议你在处理代码时使用 Spring Tools Suite 或 Eclipse。我们使用 m2eclipse eclipse插件来支持maven。其他IDE和工具只要使用Maven 3.3.3或更高版本,也应能顺利工作。
2.3.1. 激活 Spring Maven profile
Spring Cloud 项目需要激活 "spring" Maven profile,以解决spring里程碑和快照库的问题。使用你喜欢的IDE将该 profile 设置为 active 状态,否则你可能会遇到构建错误。
2.3.2. 用 m2eclipse 导入到 eclipse 中
在使用eclipse时,我们推荐使用 m2eclipse eclipse插件。如果你还没有安装m2eclipse,它可以从 "eclipse marketplace" 获得。
旧版本的m2e不支持Maven 3.3,所以一旦项目被导入Eclipse,你还需要告诉m2eclipse为项目使用正确的profile。如果你看到项目中与POMs有关的许多不同的错误,请检查你是否有一个最新的安装。如果你不能升级m2e,把 "spring" profile加入你的 settings.xml 。或者你可以从父pom的 "spring" profile 中复制版本库设置到你的 settings.xml 中。
|
2.3.3. 在没有 m2eclipse 的情况下导入 eclipse 中
如果你不愿意使用 m2eclipse,你可以用以下命令生成 eclipse 项目元数据。
$ ./mvnw eclipse:eclipse
生成的 eclipse 项目可以通过在 file
菜单中选择 import existing projects
来导入。
3. 贡献
Spring Cloud在非限制性的Apache 2.0许可下发布,并遵循非常标准的Github开发流程,使用Github tracker 处理 issue,并将 pull request 合并到 master。如果你想做出贡献,哪怕是一些微不足道的事情,请不要犹豫,但要遵循以下准则。
3.1. 签署贡献者许可协议
在我们接受一个补丁或 pull request 之前,我们需要你签署 贡献者许可协议。签署贡献者协议并不授予任何人对主仓库的提交权,但这意味着我们可以接受你的贡献,如果我们接受你的贡献,你将获得作者的荣誉。积极的贡献者可能会被要求加入核心团队,并被赋予合并 pull request 的能力。
3.2. 行为准则
本项目遵守 《贡献者公约》 的行为准则。通过参与,你被期望维护这一准则。请将不可接受的行为报告给 spring-code-of-conduct@pivotal.io 。
3.3. 准则公约和内部管理
这些都不是 pull request 的必要条件,但它们都会有帮助。它们也可以在原始 pull request 之后、合并之前添加。
-
使用Spring框架的代码格式约定。如果你使用Eclipse,你可以使用 Spring Cloud Build 项目中的
eclipse-code-formatter.xml
文件导入格式化设置。如果使用IntelliJ,你可以使用 Eclipse Code Formatter Plugin 来导入相同的文件。 -
确保所有新的
.java
文件都有一个简单的 Javadoc 类注释,至少有一个@author
的标签来标识你,最好至少有一段关于类的用途。 -
在所有新的
.java
文件中添加ASF license header 注释(从项目中的现有文件中复制)。 -
在你大量修改的
.java
文件中加入自己作为@author
(不仅仅是外观上的修改)。 -
添加一些 Javadocs,如果你改变了命名空间,则添加一些XSD doc元素。
-
一些单元测试也会有很大的帮助—总得有人来做。
-
如果没有人在使用你的分支,请将其与当前的主干分支(或主项目中的其他目标分支)重新建立基线。
-
在写提交信息时,请遵循 这些惯例,如果你要修复一个现有的问题,请在提交信息的末尾加上
Fixes gh-XXXX
(其中XXXX是 issue 编号)。
3.4. 检查风格(Checkstyle)
Spring Cloud Build自带一套检查风格(checkstyle)的规则。你可以在 spring-cloud-build-tools
模块中找到它们。该模块下最值得注意的文件是。
└── src ├── checkstyle │ └── checkstyle-suppressions.xml (3) └── main └── resources ├── checkstyle-header.txt (2) └── checkstyle.xml (1)
1 | 默认的检查风格规则 |
2 | 文件头设置 |
3 | 默认的 suppression 规则 |
3.4.1. Checkstyle 配置
Checkstyle 规则默认是禁用的。要在你的项目中添加 checkstyle,只需定义以下属性和插件。
<properties> <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) </properties> <build> <plugins> <plugin> (4) <groupId>io.spring.javaformat</groupId> <artifactId>spring-javaformat-maven-plugin</artifactId> </plugin> <plugin> (5) <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> </plugin> </plugins> <reporting> <plugins> <plugin> (5) <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> </plugin> </plugins> </reporting> </build>
1 | 构建时出现 Checkstyle error 而失败 |
2 | 违反Checkstyle规定时,不合格。 |
3 | Checkstyle还分析了test sources |
4 | 添加Spring Java Format 插件,它将重新格式化你的代码,以通过大多数Checkstyle格式化规则。 |
5 | 在你的构建和报告阶段添加checkstyle插件 |
如果你需要抑制某些规则(例如,行长需要更长),那么你只需在 ${project.root}/src/checkstyle/checkstyle-suppressions.xml
下定义一个文件,写上你的抑制措施即可。例子。
<?xml version="1.0"?> <!DOCTYPE suppressions PUBLIC "-//Puppy Crawl//DTD Suppressions 1.1//EN" "https://www.puppycrawl.com/dtds/suppressions_1_1.dtd"> <suppressions> <suppress files=".*ConfigServerApplication\.java" checks="HideUtilityClassConstructor"/> <suppress files=".*ConfigClientWatch\.java" checks="LineLengthCheck"/> </suppressions>
建议将 ${spring-cloud-build.rootFolder}/.editorconfig
和 ${spring-cloud-build.rootFolder}/.springformat
复制到你的项目。这样一来,一些默认的格式化规则就会被应用。你可以通过运行这个脚本来做到这一点。
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/.editorconfig -o .editorconfig
$ touch .springformat
3.5. IDE设置
3.5.1. Intellij IDEA
为了设置Intellij,你应该导入我们的编码惯例、检查配置文件并设置checkstyle插件。在 Spring Cloud Build 项目中可以找到以下文件。
└── src ├── checkstyle │ └── checkstyle-suppressions.xml (3) └── main └── resources ├── checkstyle-header.txt (2) ├── checkstyle.xml (1) └── intellij ├── Intellij_Project_Defaults.xml (4) └── Intellij_Spring_Boot_Java_Conventions.xml (5)
1 | 默认的Checkstyle规则 |
2 | 文件头的设置 |
3 | 默认的 suppression 规则 |
4 | Intellij的项目默认值,适用于大多数Checkstyle规则 |
5 | 适用于Intellij的项目风格惯例,适用于大多数Checkstyle规则 |
进入 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
: raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle.xml )。我们需要提供以下变量。
-
checkstyle.header.file
- 请将其指向Spring Cloud Build的,spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
文件,无论是在你克隆的 repo 中还是通过raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
URL。 -
checkstyle.suppressions.file
- 默认的 suppression 措施。请将其指向Spring Cloud Build的,spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
文件,无论是在你克隆的 repo中还是通过raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
URL。 -
checkstyle.additional.suppressions.file
- 这个变量对应于你本地项目中的suppression。例如,你在spring-cloud-contract
上工作。然后指向project-root/src/checkstyle/checkstyle-suppressions.xml`文件夹。 `spring-cloud-contract
的例子是。/home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml
。
记住将扫描范围设置为所有来源,因为我们对生产和测试来源应用检查式规则。 |
3.6. Duplicate Finder(重复搜索器)
Spring Cloud Build带来了 basepom:duplicate-finder-maven-plugin
,它可以标记java classpath上重复和冲突的类和资源。
3.6.1. Duplicate Finder 配置
Duplicate finder 默认是启用的,会在Maven构建的 verify
阶段运行,但只有当你在项目的pom.xml build
部分添加了 duplicate-finder-maven-plugin
,它才会在项目中生效。
<build>
<plugins>
<plugin>
<groupId>org.basepom.maven</groupId>
<artifactId>duplicate-finder-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
对于其他属性,我们已经设置了 插件文档 中列出的默认值。
你可以通过设置以 double-finder-maven-plugin
为前缀的选定属性的值来轻松覆盖它们。例如,将 double-finder-maven-plugin.skip
设为 true
,以便在构建中跳过重复检查。
如果你需要在你的设置中添加 ignoredClassPatterns
或 ignoredResourcePatterns
,请确保在你项目的 plugin configuration 部分添加它们。
<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>