我正在迁移到Sping 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
}
}
但是,在使用以下版本更新到Sping 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)
然而,我想知道为什么Sping Boot 3中的组件扫描机制一开始没有拾取重试配置,有人知道为什么Spring Boot 3在组件扫描期间没有拾取类吗?
2条答案
按热度按时间cvxl0en21#
在resilience 4j项目中,他们改变了 Spring Boot 3的依赖性。
因此,您应该选择io.github.resilience4j:弹性4jSpring Boot3:${弹性4j版本}
喜欢
从documentation
up9lanfz2#
它似乎与使用新的META-INF文件而不是旧的
spring.factories
文件有关。Sping Boot 2.7引入了一个新的META-INF/spring/org.springframework.boot. autoconfig.AutoConfiguration.imports文件,用于注册自动配置,同时保持与spring. factories中注册的向后兼容性。在此版本中,已删除了对spring.factories中注册自动配置的支持,以支持imports文件。
spring-cloud-dependencies-parent
物料清单中使用的Resilience 4J依赖项仍使用spring.factories
文件,而不是名为org.springframework.boot.autoconfigure.AutoConfiguration.imports
的新文件。Resilience 4J(source)中最近引入了新文件。使用版本
2.0.2
覆盖Spring BoM中的所有弹性依赖项的版本为我修复了这个问题。我将在几天后检查Spring BoM中是否更新了新的Resilience 4J版本(或是否引入了Resilience 4j-spring-boot 3)。[edit]正如其他人所注意到的,
resilience4j-spring-boot3
已经可用,我将开始使用它。