gpt4 book ai didi

java - 为特定的 Spring Boot 测试禁用 Kafka 监听器

转载 作者:行者123 更新时间:2023-12-01 18:42:23 25 4
gpt4 key购买 nike

如何在使用 Spring Boot (2.2+) 和 Spring Kafka (2.4+) 的应用程序中禁用 @SpringBootTest 测试中的 @KafkaListener 实例?

目标是在特定测试中禁用 Kafka 监听器,以便此类测试可以在不启动嵌入式 Kafka 代理的情况下运行。

最佳答案

Spring Boot 允许通过创建自定义来从扫描中排除类 TypeExcludeFilter .

要禁用 Kafka 监听器,请排除所有具有用 @KafkaListener 注解的方法的类。或@KafkaHandler :

public class KafkaListenersTypeExcludeFilter extends TypeExcludeFilter {

private static final String KAFKA_LISTENER = "org.springframework.kafka.annotation.KafkaListener";
private static final String KAFKA_HANDLER = "org.springframework.kafka.annotation.KafkaHandler";

@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) {
AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
return annotationMetadata.hasAnnotatedMethods(KAFKA_LISTENER)
|| annotationMetadata.hasAnnotatedMethods(KAFKA_HANDLER);
}

@Override
public boolean equals(Object o) {
return o != null && getClass() == o.getClass();
}

@Override
public int hashCode() {
return 1;
}
}

使用 @TypeExcludeFilters 注释 Spring Boot 测试与 KafkaListenersTypeExcludeFilter作为一个值:

@RunWith(SpringRunner.class)
@SpringBootTest
@TypeExcludeFilters(KafkaListenersTypeExcludeFilter.class)
public class SampleSpringBootTest {
//...
}

Spring Boot 测试用 @TypeExcludeFilters(KafkaListenersTypeExcludeFilter.class) 注释不会启动 Kafka 监听器,因此不需要 Kafka 代理。

当只有几个 Kafka 监听器 bean 时,您还可以按照建议模拟监听器 bean Deadpoolcomment

@RunWith(SpringRunner.class)
@SpringBootTest
@MockBean({
SampleKafkaListener.class
})
public class SampleSpringBootTest {
//...
}

关于java - 为特定的 Spring Boot 测试禁用 Kafka 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59900169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com