From c1a6515fcfd3a9855eeca0e626e3b003842a52b7 Mon Sep 17 00:00:00 2001
From: macroscopic64 <macromohan64@gmail.com>
Date: Sun, 22 Sep 2019 19:15:26 +0530
Subject: [PATCH 1/4] [BAEL-3288] - Graceful Shutdown of a Spring Boot
 Application

---
 .../GracefulShutdownApplication.java          | 16 +++++++++
 .../beans/LongRunningProcessBean.java         | 36 +++++++++++++++++++
 .../config/SpringConfiguration.java           | 34 ++++++++++++++++++
 3 files changed, 86 insertions(+)
 create mode 100644 spring-boot/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java
 create mode 100644 spring-boot/src/main/java/com/baeldung/gracefulshutdown/beans/LongRunningProcessBean.java
 create mode 100644 spring-boot/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java

diff --git a/spring-boot/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java b/spring-boot/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java
new file mode 100644
index 0000000000..b7a840b38c
--- /dev/null
+++ b/spring-boot/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java
@@ -0,0 +1,16 @@
+package com.baeldung.gracefulshutdown;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+@SpringBootApplication
+@EnableAutoConfiguration
+@ComponentScan(basePackages = {"com.baeldung.gracefulshutdown"})
+public class GracefulShutdownApplication {
+
+    public static void main(String args[]) {
+        SpringApplication.run(GracefulShutdownApplication.class, args);
+    }
+}
diff --git a/spring-boot/src/main/java/com/baeldung/gracefulshutdown/beans/LongRunningProcessBean.java b/spring-boot/src/main/java/com/baeldung/gracefulshutdown/beans/LongRunningProcessBean.java
new file mode 100644
index 0000000000..e21ddfe021
--- /dev/null
+++ b/spring-boot/src/main/java/com/baeldung/gracefulshutdown/beans/LongRunningProcessBean.java
@@ -0,0 +1,36 @@
+package com.baeldung.gracefulshutdown.beans;
+
+import javax.annotation.PostConstruct;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.task.TaskExecutor;
+import org.springframework.stereotype.Component;
+
+@Component
+public class LongRunningProcessBean {
+
+    private static final Logger LOG = LoggerFactory.getLogger(LongRunningProcessBean.class);
+
+    @Autowired
+    private TaskExecutor taskExecutor;
+
+    @PostConstruct
+    public void runTaskOnStartup() {
+        LOG.info("runTaskOnStartup entering");
+        for (int i = 0; i < 3; i++) {
+            final int processNumber = i;
+            taskExecutor.execute(() -> {
+                try {
+                    LOG.info("Long running process {} using threadpool started", processNumber);
+                    Thread.sleep(60_000);
+                    LOG.info("Long running process {} using threadpool completed", processNumber);
+                } catch (Exception e) {
+                    LOG.error("Error while executing task", e);
+                }
+            });
+        }
+        LOG.info("runTaskOnStartup exiting");
+    }
+}
diff --git a/spring-boot/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java b/spring-boot/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java
new file mode 100644
index 0000000000..1f27163215
--- /dev/null
+++ b/spring-boot/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java
@@ -0,0 +1,34 @@
+package com.baeldung.gracefulshutdown.config;
+
+import javax.annotation.PreDestroy;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.task.TaskExecutor;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+@Configuration
+@EnableScheduling
+public class SpringConfiguration {
+
+    private static final Logger LOG = LoggerFactory.getLogger(SpringConfiguration.class);
+
+    @Bean
+    public TaskExecutor taskExecutor() {
+        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+        taskExecutor.setCorePoolSize(2);
+        taskExecutor.setMaxPoolSize(2);
+        taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+        taskExecutor.setAwaitTerminationSeconds(30);
+        taskExecutor.initialize();
+        return taskExecutor;
+    }
+
+    @PreDestroy
+    public void destroy() {
+        LOG.info("Shutdown initiated");
+    }
+}

From 6f7676c739806e22b51785f699abf52a7c373191 Mon Sep 17 00:00:00 2001
From: macroscopic64 <macromohan64@gmail.com>
Date: Thu, 26 Sep 2019 23:39:55 +0530
Subject: [PATCH 2/4] [BAEL-3288] - Graceful Shutdown of a Spring Boot
 Application

---
 .../gracefulshutdown/GracefulShutdownApplication.java       | 6 +-----
 .../gracefulshutdown/config/SpringConfiguration.java        | 2 --
 2 files changed, 1 insertion(+), 7 deletions(-)

diff --git a/spring-boot/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java b/spring-boot/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java
index b7a840b38c..9cb226a49f 100644
--- a/spring-boot/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java
+++ b/spring-boot/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java
@@ -1,13 +1,9 @@
 package com.baeldung.gracefulshutdown;
 
 import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.ComponentScan;
 
-@SpringBootApplication
-@EnableAutoConfiguration
-@ComponentScan(basePackages = {"com.baeldung.gracefulshutdown"})
+@SpringBootApplication(scanBasePackages = {"com.baeldung.gracefulshutdown"})
 public class GracefulShutdownApplication {
 
     public static void main(String args[]) {
diff --git a/spring-boot/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java b/spring-boot/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java
index 1f27163215..b458f16206 100644
--- a/spring-boot/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java
+++ b/spring-boot/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java
@@ -7,11 +7,9 @@ import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.task.TaskExecutor;
-import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 
 @Configuration
-@EnableScheduling
 public class SpringConfiguration {
 
     private static final Logger LOG = LoggerFactory.getLogger(SpringConfiguration.class);

From 5621a6d8c5b527a607a261db4eea0d838393e2ab Mon Sep 17 00:00:00 2001
From: macroscopic64 <macromohan64@gmail.com>
Date: Sat, 28 Sep 2019 11:38:39 +0530
Subject: [PATCH 3/4] [BAEL-3288] - Graceful Shutdown of a Spring Boot
 Application

---
 .../baeldung/gracefulshutdown/GracefulShutdownApplication.java    | 0
 .../baeldung/gracefulshutdown/beans/LongRunningProcessBean.java   | 0
 .../com/baeldung/gracefulshutdown/config/SpringConfiguration.java | 0
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {spring-boot => spring-boot-ops-2}/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java (100%)
 rename {spring-boot => spring-boot-ops-2}/src/main/java/com/baeldung/gracefulshutdown/beans/LongRunningProcessBean.java (100%)
 rename {spring-boot => spring-boot-ops-2}/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java (100%)

diff --git a/spring-boot/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java b/spring-boot-ops-2/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java
similarity index 100%
rename from spring-boot/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java
rename to spring-boot-ops-2/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java
diff --git a/spring-boot/src/main/java/com/baeldung/gracefulshutdown/beans/LongRunningProcessBean.java b/spring-boot-ops-2/src/main/java/com/baeldung/gracefulshutdown/beans/LongRunningProcessBean.java
similarity index 100%
rename from spring-boot/src/main/java/com/baeldung/gracefulshutdown/beans/LongRunningProcessBean.java
rename to spring-boot-ops-2/src/main/java/com/baeldung/gracefulshutdown/beans/LongRunningProcessBean.java
diff --git a/spring-boot/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java b/spring-boot-ops-2/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java
similarity index 100%
rename from spring-boot/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java
rename to spring-boot-ops-2/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java

From d4b9f8a59a7a665941259e84a18cb7d1545f7ffa Mon Sep 17 00:00:00 2001
From: macroscopic64 <macromohan64@gmail.com>
Date: Sat, 28 Sep 2019 11:40:44 +0530
Subject: [PATCH 4/4] [BAEL-3288] - Graceful Shutdown of a Spring Boot
 Application

---
 .../baeldung/gracefulshutdown/GracefulShutdownApplication.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/spring-boot-ops-2/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java b/spring-boot-ops-2/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java
index 9cb226a49f..dd0d0f920c 100644
--- a/spring-boot-ops-2/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java
+++ b/spring-boot-ops-2/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java
@@ -3,7 +3,7 @@ package com.baeldung.gracefulshutdown;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
-@SpringBootApplication(scanBasePackages = {"com.baeldung.gracefulshutdown"})
+@SpringBootApplication
 public class GracefulShutdownApplication {
 
     public static void main(String args[]) {