You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/03/16 13:31:20 UTC

[camel-spring-boot] 02/02: CAMEL-14642: camel-spring-boot - Using max duration and shutdown before should terminate scheduled thread quicker

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git

commit 0bed921705f0cea05db7df03c765088f4b1ed27c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Mar 16 14:31:04 2020 +0100

    CAMEL-14642: camel-spring-boot - Using max duration and shutdown before should terminate scheduled thread quicker
---
 .../org/apache/camel/spring/boot/CamelMainRunController.java   |  4 ++++
 .../spring/boot/CamelSpringBootApplicationController.java      |  4 ++++
 .../camel/spring/boot/CamelSpringBootApplicationListener.java  | 10 +++++++---
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelMainRunController.java b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelMainRunController.java
index 6a9771f..1eaeba6 100644
--- a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelMainRunController.java
+++ b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelMainRunController.java
@@ -43,6 +43,10 @@ public class CamelMainRunController {
         return controller.getLatch();
     }
 
+    public Runnable getMainCompleteTask() {
+        return controller.getMainCompletedTask();
+    }
+
     public AtomicBoolean getCompleted() {
         return controller.getCompleted();
     }
diff --git a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelSpringBootApplicationController.java b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelSpringBootApplicationController.java
index eacf037..38a208a 100644
--- a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelSpringBootApplicationController.java
+++ b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelSpringBootApplicationController.java
@@ -77,6 +77,10 @@ public class CamelSpringBootApplicationController {
         return this.latch;
     }
 
+    public Runnable getMainCompletedTask() {
+        return main.getCompleteTask();
+    }
+
     public AtomicBoolean getCompleted() {
         return completed;
     }
diff --git a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelSpringBootApplicationListener.java b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelSpringBootApplicationListener.java
index 325731f..dd79b26 100644
--- a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelSpringBootApplicationListener.java
+++ b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelSpringBootApplicationListener.java
@@ -120,7 +120,7 @@ public class CamelSpringBootApplicationListener implements ApplicationListener<C
                     if (configurationProperties.getDurationMaxSeconds() > 0) {
                         LOG.info("CamelSpringBoot will terminate after {} seconds", configurationProperties.getDurationMaxSeconds());
                         terminateMainControllerAfter(camelContext, configurationProperties.getDurationMaxSeconds(),
-                                controller.getCompleted(), controller.getLatch());
+                                controller.getCompleted(), controller.getLatch(), controller.getMainCompleteTask());
                     }
 
                     camelContext.addStartupListener(new StartupListener() {
@@ -218,7 +218,8 @@ public class CamelSpringBootApplicationListener implements ApplicationListener<C
 
     // Helpers
 
-    private void terminateMainControllerAfter(final CamelContext camelContext, int seconds, final AtomicBoolean completed, final CountDownLatch latch) {
+    private void terminateMainControllerAfter(final CamelContext camelContext, int seconds, final AtomicBoolean completed,
+                                              final CountDownLatch latch, final Runnable mainCompletedTask) {
         ScheduledExecutorService executorService = camelContext.getExecutorServiceManager().newSingleThreadScheduledExecutor(this, "CamelSpringBootTerminateTask");
 
         final AtomicBoolean running = new AtomicBoolean();
@@ -234,6 +235,7 @@ public class CamelSpringBootApplicationListener implements ApplicationListener<C
                 } finally {
                     completed.set(true);
                     latch.countDown();
+                    mainCompletedTask.run();
                 }
                 running.set(false);
             };
@@ -249,6 +251,7 @@ public class CamelSpringBootApplicationListener implements ApplicationListener<C
                     future.cancel(true);
                     // trigger shutdown
                     latch.countDown();
+                    mainCompletedTask.run();
                 }
             }
         });
@@ -282,7 +285,8 @@ public class CamelSpringBootApplicationListener implements ApplicationListener<C
         });
     }
 
-    private void terminateApplicationContext(final ConfigurableApplicationContext applicationContext, final CamelContext camelContext, final CountDownLatch latch) {
+    private void terminateApplicationContext(final ConfigurableApplicationContext applicationContext, final CamelContext camelContext,
+                                             final CountDownLatch latch) {
         ExecutorService executorService = camelContext.getExecutorServiceManager().newSingleThreadExecutor(this, "CamelSpringBootTerminateTask");
 
         final AtomicBoolean running = new AtomicBoolean();