2017-09-28 2 views
0

스프링 부트가 등록 정보를로드하지 못했습니다. 다음은 yaml 파일을 통해 사용중인 속성입니다. java.lang.IllegalAccessException : 클래스 org.apache.kafka.common.utils.Utils이 클래스 org.springframework의 멤버에 액세스 할 수 없습니다스프링 부트 자동 구성이 실패했습니다. 스프링 카프카 등록 정보로드

spring: 
    kafka: 
    bootstrap-servers: localhost:9092 
    consumer: 
     auto-commit-interval: 100 
     enable-auto-commit: true 
     group-id: ******************** 
     auto-offset-reset: earliest 
     value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer 
    producer: 
     batch-size: 16384 
     buffer-memory: 33554432 
     retries: 0 
     value-serializer: org.springframework.kafka.support.serializer.JsonSerializer 
    listener: 
     poll-timeout: 20000 

내가 점점 오전 예외는이

에 의해 발생 .kafka.support.serializer.JsonDeserializer 수정 자 "protected"사용

생성자가 보호되어 있다고 생각합니다. 이것을 인스턴스화하는 방법을 제공하십시오.

답변

0

맞습니다. 참조 :

protected JsonDeserializer() { 
     this((Class<T>) null); 
    } 

    protected JsonDeserializer(ObjectMapper objectMapper) { 
     this(null, objectMapper); 
    } 

    public JsonDeserializer(Class<T> targetType) { 
     this(targetType, new ObjectMapper()); 
     this.objectMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false); 
     this.objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
    } 

JsonDeserializer은 (는) targetType가 역 직렬화하는 알 필요가 있기 때문에 기본 생성자에 의해 인스턴스화하도록 설계되지 않았습니다.

public class FooJsonDeserializer extends JsonDeserializer<Foo> { } 

을하고 value-deserializer 속성 클래스 값으로 이미를 사용

당신은 당신의 특정 유형이 클래스를 확장 할 수 있습니다.

아니면 DefaultKafkaConsumerFactory 사용자 정의 할 수 고려할 수 있습니다 :이 문제를 해결

@Bean 
public ConsumerFactory<?, ?> kafkaConsumerFactory(KafkaProperties properties) { 
    Map<String, Object> consumerProperties = properties.buildConsumerProperties(); 
    consumerProperties.put(CommonClientConfigs.METRIC_REPORTER_CLASSES_CONFIG, 
      MyConsumerMetricsReporter.class); 
    DefaultKafkaConsumerFactory<Object, Object> consumerFactory = 
      new DefaultKafkaConsumerFactory<>(consumerProperties); 
    consumerFactory.setValueDeserializer(new JsonDeserializer<>(Foo.class)); 
    return consumerFactory; 
} 
+0

감사합니다. –

관련 문제