This guide shows how to integrate H2 database with Apache Kafka in Spring Boot for producing and consuming data events.
1. Add Dependencies
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
2. Configure H2 and Kafka
spring.datasource.url=jdbc:h2:mem:kafkadb
spring.datasource.driver-class-name=org.h2.Driver
spring.jpa.hibernate.ddl-auto=create
spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=demo-group
3. Create Entity
@Entity
public class Order {
@Id @GeneratedValue
private Long id;
private String product;
private int quantity;
}
4. Repository
public interface OrderRepository extends JpaRepository<Order, Long> {}
5. Kafka Producer
@Service
public class OrderProducer {
private final KafkaTemplate<String, String> kafkaTemplate;
public OrderProducer(KafkaTemplate<String, String> kafkaTemplate) {
this.kafkaTemplate = kafkaTemplate;
}
public void sendOrder(String msg) {
kafkaTemplate.send("orders", msg);
}
}
6. Kafka Consumer
@Service
public class OrderConsumer {
private final OrderRepository repo;
public OrderConsumer(OrderRepository repo) {
this.repo = repo;
}
@KafkaListener(topics = "orders", groupId = "demo-group")
public void listen(String message) {
String[] parts = message.split(",");
repo.save(new Order(null, parts[0], Integer.parseInt(parts[1])));
}
}
7. REST Controller
@RestController
@RequestMapping("/orders")
public class OrderController {
private final OrderProducer producer;
public OrderController(OrderProducer producer) {
this.producer = producer;
}
@PostMapping
public String create(@RequestParam String product, @RequestParam int qty) {
producer.sendOrder(product + "," + qty);
return "Order sent!";
}
}
image quote pre code