首页 > 解决方案 > 在运行时更改 Spring Cloud Circuit Breaker 的超时?

问题描述

我正在使用 Spring Cloud Circuit Breaker 2.0.0(resilience4j 实现)在我的应用程序中进行断路和超时。我创建了以下配置:

@Bean
public Customizer<Resilience4JCircuitBreakerFactory> defaultCustomizer() {
    return factory -> 
        factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
                .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(10)).build())
                .circuitBreakerConfig(..)
                .build());
}

现在我想编写一个集成测试来验证我的行为在超时发生时是否正确。为此,我想暂时将上面配置中指定的超时持续时间更改为 1 毫秒而不是 10 秒。

TimeLimiterConfig所以我的问题是:在编写 Spring Boot 集成测试时,如何更改(临时)超时值?

标签: springspring-bootintegration-testingresilience4jspring-cloud-circuitbreaker

解决方案


您可以使用@Value Spring 注释从资源文件夹中检索配置文件中的值src/main/resources/common.properties

@Bean
public Customizer<Resilience4JCircuitBreakerFactory> defaultCustomizer(
    @Value("${duration.milli:600}") int durationMilli) {
    return factory -> 
        factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
                .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofMilli(durationMilli)).build())
                .circuitBreakerConfig(..)
                .build());
}

然后将值设置为src/main/resources/common.properties

duration.milli=600

当您进行测试时,您可以在test文件夹中配置另一个src/test/resources/common.properties具有不同值的资源文件。

duration.milli=1

推荐阅读