diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/scheduling/SimpleMessagingTaskScheduler.java b/org.springframework.integration/src/main/java/org/springframework/integration/scheduling/SimpleMessagingTaskScheduler.java index be6bec2e07..86273fe466 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/scheduling/SimpleMessagingTaskScheduler.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/scheduling/SimpleMessagingTaskScheduler.java @@ -40,6 +40,8 @@ public class SimpleMessagingTaskScheduler extends AbstractMessagingTaskScheduler private final ScheduledExecutorService executor; + private volatile boolean waitForTasksToCompleteOnShutdown = true; + private volatile ErrorHandler errorHandler; private final Set pendingTasks = new CopyOnWriteArraySet(); @@ -55,6 +57,10 @@ public class SimpleMessagingTaskScheduler extends AbstractMessagingTaskScheduler } + public void setWaitForTasksToCompleteOnShutdown(boolean waitForTasksToCompleteOnShutdown) { + this.waitForTasksToCompleteOnShutdown = waitForTasksToCompleteOnShutdown; + } + public void setErrorHandler(ErrorHandler errorHandler) { this.errorHandler = errorHandler; } @@ -85,7 +91,12 @@ public class SimpleMessagingTaskScheduler extends AbstractMessagingTaskScheduler public void stop() { synchronized (this.lifecycleMonitor) { if (this.running) { - this.executor.shutdownNow(); + if (this.waitForTasksToCompleteOnShutdown) { + this.executor.shutdown(); + } + else { + this.executor.shutdownNow(); + } this.running = false; } }