弹性4J重试未在 Spring Boot 3中自动配置

lhcgjxsq  于 2022-12-21  发布在  Spring
关注(0)|答案(2)|浏览(201)

我正在迁移到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在组件扫描期间没有拾取类吗?

cvxl0en2

cvxl0en21#

在resilience 4j项目中,他们改变了 Spring Boot 3的依赖性。
因此,您应该选择io.github.resilience4j:弹性4jSpring Boot3:${弹性4j版本}
喜欢

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

documentation

up9lanfz

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已经可用,我将开始使用它。

相关问题