所以我要把一个微服务从spring框架迁移到springboot2.3.10.release。但当我尝试创建集成测试并启动它时,出现了一个模糊的错误:
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.kafka.core.KafkaTemplate]: Factory method 'kafkaTemplate' threw exception; nested exception is java.lang.VerifyError: Bad return type
Exception Details:
Location:
com/fasterxml/jackson/databind/cfg/MapperBuilder.streamFactory()Lcom/fasterxml/jackson/core/TokenStreamFactory; @7: areturn
Reason:
Type 'com/fasterxml/jackson/core/JsonFactory' (current frame, stack[0]) is not assignable to 'com/fasterxml/jackson/core/TokenStreamFactory' (from method signature)
Current Frame:
bci: @7
flags: { }
locals: { 'com/fasterxml/jackson/databind/cfg/MapperBuilder' }
stack: { 'com/fasterxml/jackson/core/JsonFactory' }
Bytecode:
0x0000000: 2ab4 0002 b600 08b0
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:652)
... 333 common frames omitted
Caused by: java.lang.VerifyError: Bad return type
Exception Details:
Location:
com/fasterxml/jackson/databind/cfg/MapperBuilder.streamFactory()Lcom/fasterxml/jackson/core/TokenStreamFactory; @7: areturn
Reason:
Type 'com/fasterxml/jackson/core/JsonFactory' (current frame, stack[0]) is not assignable to 'com/fasterxml/jackson/core/TokenStreamFactory' (from method signature)
Current Frame:
bci: @7
flags: { }
locals: { 'com/fasterxml/jackson/databind/cfg/MapperBuilder' }
stack: { 'com/fasterxml/jackson/core/JsonFactory' }
Bytecode:
0x0000000: 2ab4 0002 b600 08b0
at com.fasterxml.jackson.databind.json.JsonMapper.builder(JsonMapper.java:114)
at org.springframework.kafka.support.JacksonUtils.enhancedObjectMapper(JacksonUtils.java:58)
at org.springframework.kafka.support.JacksonUtils.enhancedObjectMapper(JacksonUtils.java:47)
at org.springframework.kafka.support.DefaultKafkaHeaderMapper.<init>(DefaultKafkaHeaderMapper.java:112)
at org.springframework.kafka.support.converter.MessagingMessageConverter.<init>(MessagingMessageConverter.java:67)
at org.springframework.kafka.core.KafkaTemplate.<init>(KafkaTemplate.java:101)
at org.springframework.kafka.core.KafkaTemplate.<init>(KafkaTemplate.java:150)
at org.springframework.kafka.core.KafkaTemplate.<init>(KafkaTemplate.java:122)
at com.gdn.x.cart.v2.rest.web.config.kafka.KafkaConfig.kafkaTemplate(KafkaConfig.java:88)
at com.gdn.x.cart.v2.rest.web.config.kafka.KafkaConfig$$EnhancerBySpringCGLIB$$62380140.CGLIB$kafkaTemplate$0(<generated>)
at com.gdn.x.cart.v2.rest.web.config.kafka.KafkaConfig$$EnhancerBySpringCGLIB$$62380140$$FastClassBySpringCGLIB$$f4054673.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
at com.gdn.x.cart.v2.rest.web.config.kafka.KafkaConfig$$EnhancerBySpringCGLIB$$62380140.kafkaTemplate(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
... 334 common frames omitted
这是我的Kafka配置:
@EnableKafka
@Configuration
public class KafkaConfig {
// Some Properties & Consumer Configurations
@Bean
public Map<String, Object> producerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaBrokerList);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, KafkaProducerInterceptor.class.getName());
return props;
}
@Bean
public ProducerFactory<String, String> producerFactory() {
return new DefaultKafkaProducerFactory<>(producerConfigs());
}
@Bean
public KafkaTemplate<String, String> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}
}
服务pom父级继承自版本为2.3.10.release的spring boot starter父级。jackson库版本也继承自父pom,我检查了所有jackson版本都使用2.11.4,没有冲突的依赖关系。当我运行应用程序时,kafkatemplate会正常示例化。它只在我开始集成测试时抛出这个错误。我错过了什么?有办法调试这个吗?
以下是我尝试过但失败的:
清除.m2目录
在父pom中显式声明jackson数据绑定版本
将JUnit4更改为JUnit5
升级maven-plugins至最新版本
将Spring Boot版本降低1
1条答案
按热度按时间2j4z5cfb1#
我意识到,当开始一个单一的集成测试时,在终端上打印了多个spring boot的横幅,这让我怀疑它在一个测试用例中启动了多次。然后我意识到我在父pom的依赖项部分包含了springbootstarter,并试图删除它。取出后效果良好。虽然我还不知道根本原因。