718676b95e10c3590aeb7f185e0ee30da7bbcf21
[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.annotation.EnableAsync;
11
12 import javax.annotation.PreDestroy;
13 import java.util.concurrent.ExecutionException;
14
15
16 @SpringBootApplication
17 @EnableAsync
18 @Slf4j
19 public class Application implements ApplicationRunner
20 {
21   @Autowired
22   Consumer<?, ?> kafkaConsumer;
23   @Autowired
24   SimpleConsumer simpleConsumer;
25
26   @Override
27   public void run(ApplicationArguments args) throws Exception
28   {
29     log.info("Starting SimpleConsumer");
30     simpleConsumer.run();
31   }
32
33   @PreDestroy
34   public void stop() throws ExecutionException, InterruptedException
35   {
36     log.info("Signaling SimpleConsumer to quit its work");
37     kafkaConsumer.wakeup();
38
39     while (simpleConsumer.isRunning())
40     {
41       log.info("Waiting for SimpleConsumer to finish its work");
42       try
43       {
44         Thread.sleep(1000);
45       }
46       catch (InterruptedException e) {}
47     }
48     log.info("SimpleConsumer finished its work");
49   }
50
51
52   public static void main(String[] args)
53   {
54     SpringApplication.run(Application.class, args);
55   }
56 }