From 7cf65b5089d103542849e4ca12b6f6df6ad79aa0 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Mon, 11 Apr 2022 10:51:01 +0200 Subject: [PATCH] Die Spring-Boot App wird nun sauber herunter gefahren MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit * Zuvor wurde die App nicht richtig beendet, weil der ExecutorService nicht beendet wurde und sich die JVM deswegen nicht beenden konnte. * Dies ist erst durch die Aktivierung des shutdown-Endpoints aufgefallen. * Jetzt wurde in `Application` eine `@PreDestroy`-Methode ergänzt, die den ExecutorService nach allen Regeln der Kunst ordentlich beendet. --- src/main/java/de/juplo/kafka/Application.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/main/java/de/juplo/kafka/Application.java b/src/main/java/de/juplo/kafka/Application.java index f227bbe..6601e6d 100644 --- a/src/main/java/de/juplo/kafka/Application.java +++ b/src/main/java/de/juplo/kafka/Application.java @@ -7,6 +7,11 @@ import org.springframework.boot.ApplicationRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import javax.annotation.PreDestroy; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.TimeUnit; + @SpringBootApplication @Slf4j @@ -14,6 +19,8 @@ public class Application implements ApplicationRunner { @Autowired EndlessConsumer endlessConsumer; + @Autowired + ExecutorService executor; @Override @@ -23,6 +30,33 @@ public class Application implements ApplicationRunner endlessConsumer.start(); } + @PreDestroy + public void stopExecutor() + { + try + { + log.info("Shutting down the ExecutorService."); + executor.shutdown(); + log.info("Waiting 5 seconds for the ExecutorService to terminate..."); + executor.awaitTermination(5, TimeUnit.SECONDS); + } + catch (InterruptedException e) + { + log.error("Exception while waiting for the termination of the ExecutorService: {}", e.toString()); + } + finally + { + if (!executor.isShutdown()) + { + log.warn("Forcing shutdown of ExecutorService!"); + executor + .shutdownNow() + .forEach(runnable -> log.warn("Unfinished task: {}", runnable.getClass().getSimpleName())); + } + log.info("Shutdow of ExecutorService finished"); + } + } + public static void main(String[] args) { -- 2.20.1