如何在Java配置类中而非YML文件设置Kafka反序列化委托类?
在Java配置类中无魔法值配置Kafka ErrorHandlingDeserializer的委托反序列化器
你可以借助Spring Kafka提供的内置常量替代硬编码的魔法值,完成委托反序列化器的配置,无需手动写字符串键名。以下是修改后的完整配置类:
import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.KafkaConsumer; import org.apache.kafka.common.serialization.StringDeserializer; import org.springframework.kafka.support.serializer.ErrorHandlingDeserializer; import org.springframework.kafka.support.serializer.JsonDeserializer; import java.util.Properties; public class KafkaConfig { @Bean public KafkaConsumer<String, Object> kafkaConsumer() { Properties properties = new Properties(); // 设置顶层的ErrorHandlingDeserializer properties.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, ErrorHandlingDeserializer.class.getName()); properties.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, ErrorHandlingDeserializer.class.getName()); // 配置键的委托反序列化器(使用框架常量,避免魔法值) properties.setProperty(ErrorHandlingDeserializer.KEY_DESERIALIZER_CLASS, StringDeserializer.class.getName()); // 配置值的委托反序列化器 properties.setProperty(ErrorHandlingDeserializer.VALUE_DESERIALIZER_CLASS, JsonDeserializer.class.getName()); // 配置Json反序列化器的信任包(使用JsonDeserializer的常量) properties.setProperty(JsonDeserializer.TRUSTED_PACKAGES, "*"); return new KafkaConsumer<>(properties); } }
关键细节:
ErrorHandlingDeserializer.KEY_DESERIALIZER_CLASS和ErrorHandlingDeserializer.VALUE_DESERIALIZER_CLASS是框架内置的常量,对应你yml配置里的deserializer.key.delegate.class和deserializer.value.delegate.class,彻底避免了硬编码字符串。JsonDeserializer.TRUSTED_PACKAGES对应yml中的json.trusted.packages,同样用常量替代魔法值,代码可读性和可维护性更强。
内容的提问来源于stack exchange,提问作者JerrryUL
相关产品推荐
相关产品推荐

