WIP:TaskExecutor-NEU
authorKai Moritz <kai@juplo.de>
Fri, 4 Nov 2022 09:55:35 +0000 (10:55 +0100)
committerKai Moritz <kai@juplo.de>
Fri, 4 Nov 2022 11:52:13 +0000 (12:52 +0100)
src/main/java/de/juplo/kafka/Application.java
src/main/java/de/juplo/kafka/SimpleConsumer.java

index 718676b..a9b466d 100644 (file)
@@ -7,17 +7,19 @@ import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.scheduling.annotation.EnableAsync;
 
 import javax.annotation.PreDestroy;
 import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Future;
 
 
 @SpringBootApplication
-@EnableAsync
 @Slf4j
 public class Application implements ApplicationRunner
 {
+  @Autowired
+  Executor executor;
   @Autowired
   Consumer<?, ?> kafkaConsumer;
   @Autowired
@@ -27,25 +29,14 @@ public class Application implements ApplicationRunner
   public void run(ApplicationArguments args) throws Exception
   {
     log.info("Starting SimpleConsumer");
-    simpleConsumer.run();
+    executor.execute(simpleConsumer);
   }
 
   @PreDestroy
-  public void stop() throws ExecutionException, InterruptedException
+  public void shutdown() throws ExecutionException, InterruptedException
   {
     log.info("Signaling SimpleConsumer to quit its work");
     kafkaConsumer.wakeup();
-
-    while (simpleConsumer.isRunning())
-    {
-      log.info("Waiting for SimpleConsumer to finish its work");
-      try
-      {
-        Thread.sleep(1000);
-      }
-      catch (InterruptedException e) {}
-    }
-    log.info("SimpleConsumer finished its work");
   }
 
 
index 4459a79..53bd112 100644 (file)
@@ -6,7 +6,6 @@ import org.apache.kafka.clients.consumer.Consumer;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
 import org.apache.kafka.clients.consumer.ConsumerRecords;
 import org.apache.kafka.common.errors.WakeupException;
-import org.springframework.scheduling.annotation.Async;
 
 import java.time.Duration;
 import java.util.Arrays;
@@ -14,24 +13,22 @@ import java.util.Arrays;
 
 @Slf4j
 @RequiredArgsConstructor
-public class SimpleConsumer
+public class SimpleConsumer implements Runnable
 {
   private final String id;
   private final String topic;
   private final Consumer<String, String> consumer;
 
-  private volatile boolean running = false;
   private long consumed = 0;
 
 
-  @Async
+  @Override
   public void run()
   {
     try
     {
       log.info("{} - Subscribing to topic test", id);
       consumer.subscribe(Arrays.asList(topic));
-      running = true;
 
       while (true)
       {
@@ -65,15 +62,9 @@ public class SimpleConsumer
     }
     finally
     {
-      running = false;
       log.info("{} - Closing the KafkaConsumer", id);
       consumer.close();
       log.info("{}: Consumed {} messages in total, exiting!", id, consumed);
     }
   }
-
-  public boolean isRunning()
-  {
-    return running;
-  }
 }