在运行时更改 Spring Cloud Circuit Breaker 的超时?

Change timeout for Spring Cloud Circuit Breaker at runtime?

我正在使用 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 秒。

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

您可以使用 @Value Spring annotation 从资源文件夹 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