Spring-Boot Version des Simple-Consumer
[demos/kafka/training] / src / main / java / de / juplo / kafka / Application.java
1 package de.juplo.kafka;
2
3 import lombok.extern.slf4j.Slf4j;
4 import org.apache.kafka.clients.consumer.Consumer;
5 import org.springframework.beans.factory.annotation.Autowired;
6 import org.springframework.boot.ApplicationArguments;
7 import org.springframework.boot.ApplicationRunner;
8 import org.springframework.boot.SpringApplication;
9 import org.springframework.boot.autoconfigure.SpringBootApplication;
10 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
11
12 import javax.annotation.PreDestroy;
13 import java.util.concurrent.ExecutionException;
14 import java.util.concurrent.Future;
15
16
17 @SpringBootApplication
18 @Slf4j
19 public class Application implements ApplicationRunner
20 {
21   @Autowired
22   ThreadPoolTaskExecutor taskExecutor;
23   @Autowired
24   Consumer<?, ?> kafkaConsumer;
25   @Autowired
26   SimpleConsumer simpleConsumer;
27
28   Future<?> consumerJob;
29
30   @Override
31   public void run(ApplicationArguments args) throws Exception
32   {
33     log.info("Starting SimpleConsumer");
34     consumerJob = taskExecutor.submit(simpleConsumer);
35   }
36
37   @PreDestroy
38   public void shutdown() throws ExecutionException, InterruptedException
39   {
40     log.info("Signaling SimpleConsumer to quit its work");
41     kafkaConsumer.wakeup();
42     log.info("Waiting for SimpleConsumer to finish its work");
43     consumerJob.get();
44     log.info("SimpleConsumer finished its work");
45   }
46
47
48   public static void main(String[] args)
49   {
50     SpringApplication.run(Application.class, args);
51   }
52 }