Resilience4J重试在Spring引导中没有自动配置



我正在迁移到Spring Boot 3。在Spring Boot 2中,Resilience4J Retry是自动配置的,并使用以下设置开箱即用:

application.yaml:

resilience4j.retry:
instances:
some-instance
# retry config here

测试类:

@SpringBootTest
public class TestClass {
@Autowired
private RetryRegistry retryRegistry;
@Test
void someTest() {
// perform test and evaluate retries using retryRegistry
}
}

但是,当使用以下版本更新到Spring Boot 3时:

org.springframework.boot:spring-boot-starter:jar:3.0.0:compile
io.github.resilience4j:resilience4j-spring-boot2:jar:1.7.0:compile (derived from a Spring BoM)

自动连接RetryRegistry的测试失败,出现以下消息:

Unsatisfied dependency expressed through field 'retryRegistry': 
No qualifying bean of type 'io.github.resilience4j.retry.RetryRegistry' available:
expected at least 1 bean which qualifies as autowire candidate.
Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

我设法通过在测试中显式导入Resilience4j Retry配置来修复测试,使用:

@Import(io.github.resilience4j.retry.autoconfigure.RetryAutoConfiguration.class)

然而,我想知道为什么Spring Boot 3中的组件扫描机制一开始没有选择重试配置。有人知道为什么Spring Boot 3在组件扫描时没有选择这个类吗?

在resilience4j项目中,他们更改了spring boot 3的依赖项。

所以你应该去io.github.resilience4j:resilience4j-spring-boot3:${resilience4jVersion}

org.springframework.boot:spring-boot-starter:jar:3.0.0:compile
io.github.resilience4j:resilience4j-spring-boot3:jar:2.0.0:compile 

从文档

这似乎与使用新的META-INF文件而不是旧的spring.factories文件有关。来自文档:

Spring Boot 2.7引入了一个新的META-INF/Spring/org.springframework.boot.autoconfigure.AutoConfiguration。导入用于注册自动配置的文件,同时保持与spring.factories中的注册的向后兼容性。在这个版本中,支持在spring中注册自动配置。工厂已被删除,取而代之的是导入文件。

spring-cloud-dependencies-parentBoM中使用的Resilience4J依赖项仍然使用spring.factories文件而不是名为org.springframework.boot.autoconfigure.AutoConfiguration.imports的新文件。这个新文件最近被引入到了Resilience4J(源代码)中。

2.0.2版本覆盖Spring BoM的版本,为我修复了所有弹性依赖关系。我将在几天后检查是否在Spring BoM中更新了新的Resilience4J版本(或者已经引入了Resilience4J - Spring -boot3)。

[编辑]正如其他人注意到的那样,resilience4j-spring-boot3已经可用了。我将开始使用它。

相关内容

  • 没有找到相关文章

最新更新