2017-09-28 4 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

これで問題が解決してくれてありがとう。 –

関連する問題