package com.personal.book.library.config.kafka; import java.util.HashMap; import java.util.Map; import org.apache.kafka.clients.producer.ProducerConfig; import org.apache.kafka.common.serialization.StringSerializer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import org.springframework.kafka.core.DefaultKafkaProducerFactory; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.kafka.core.ProducerFactory; import org.springframework.kafka.support.serializer.JsonSerializer; import com.personal.book.library.servicelayer.model.MailContext; @Configuration @PropertySource({ "classpath:application.properties" }) public class KafkaProducerConfig { @Autowired private Environment environment; @Bean public ProducerFactory<String, MailContext> mailContextProducerFactory() { Map<String, Object> configProps = new HashMap<>(); configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, environment.getProperty("kafka.bootstrap.address")); configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class); configProps.put(ProducerConfig.MAX_BLOCK_MS_CONFIG, 5000); return new DefaultKafkaProducerFactory<>(configProps); } @Bean public KafkaTemplate<String, MailContext> mailContextKafkaTemplate() { return new KafkaTemplate<>(mailContextProducerFactory()); } }