Spring Boot集成Embedded Kafka抛出BeanCreationException异常如何解决
Spring Boot 集成EmbeddedKafka测试NoSuchFieldError问题解决
测试用例代码
@ExtendWith(SpringExtension.class) @SpringBootTest(classes = {Application.class}) @ActiveProfiles("test") @EnableConfigurationProperties @EmbeddedKafka(controlledShutdown = true, topics = {"topic1", "topic2", "topic3"}) class Name {}
报错信息
Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'embeddedKafka': Invocation of init method failed; nested exception is java.lang.NoSuchFieldError: DEFAULT_SASL_ENABLED_MECHANISMS Caused by: java.lang.NoSuchFieldError: DEFAULT_SASL_ENABLED_MECHANISMS at kafka.server.Defaults$.<clinit>(KafkaConfig.scala:242) at kafka.server.KafkaConfig$.<clinit>(KafkaConfig.scala:961) at kafka.server.KafkaConfig.LogDirProp(KafkaConfig.scala) at org.springframework.kafka.test.EmbeddedKafkaBroker.afterPropertiesSet(EmbeddedKafkaBroker.java:322) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1790) ... 72 common frames omitted
根因说明
该错误为依赖版本不兼容导致:
spring-kafka 2.7.7版本官方适配的Kafka版本为2.8.x系列,原配置手动排除了spring-kafka自带的kafka-clients依赖,强制引入了3.0.0版本的kafka-clients。3.0.0版本Kafka删除了旧版本中存在的DEFAULT_SASL_ENABLED_MECHANISMS常量字段,导致低版本spring-kafka调用Kafka配置类时找不到对应字段,抛出异常。
原错误POM依赖配置
<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.7.7</version> <exclusions> <exclusion> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka-test</artifactId> <version>2.7.7</version> <scope>test</scope> </dependency>
修复后POM依赖配置
<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.7.7</version> </dependency> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka-test</artifactId> <version>2.7.7</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.8.1</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.8.1</version> <classifier>test</classifier> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.13</artifactId> <version>2.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.13</artifactId> <version>2.8.1</version> <classifier>test</classifier> <scope>test</scope> </dependency>
调整说明
- 移除了spring-kafka依赖中对kafka-clients的排除规则
- 所有Kafka相关组件版本统一为2.8.1,和spring-kafka 2.7.7版本完全适配
- 补充了EmbeddedKafka运行需要的测试分类器依赖、服务端依赖
内容的提问来源于stack exchange,提问作者DeeP
相关产品推荐
相关产品推荐

