Skip to content

Graceful shutdown for @Scheduled tasks quits instantly #30556

@membersound

Description

@membersound

The following configuration shuts down instantly when the application is stopped.

If I'm not missing any configuration, this might be a bug?

@Configuration
public class ScheduledGracefulShutdownConfig {
        //this shouldn't be necessary at all with ' spring.task.scheduling.shutdown.await-termination'. but neither works
	@Bean
	TaskSchedulerCustomizer taskSchedulerCustomizer() {
		return taskScheduler -> {
			taskScheduler.setWaitForTasksToCompleteOnShutdown(true);
			taskScheduler.setAwaitTerminationSeconds(60);
		};
	}
}

@SpringBootApplication
@EnableScheduling
@EnableAsync
public class AppConfiguration {
	public static void main(String[] args) {
		SpringApplication.run(AppConfiguration.class, args);
	}
}

@Service
public class ScheduledService {
	private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());

	@Scheduled(fixedRate = 100000000L)
	public void scheduled() throws InterruptedException {
		LOGGER.info("Starting scheduled job...");
		TimeUnit.MINUTES.sleep(5);
		LOGGER.info("Scheduled job finished.");
	}
}

application.properties:

server.shutdown=graceful
server.shutdown.grace-period=30s
spring.task.execution.shutdown.await-termination=true
spring.task.execution.shutdown.await-termination-period=30s
spring.task.scheduling.shutdown.await-termination=true
spring.task.scheduling.shutdown.await-termination-period=30s

spring-boot-2.6.6 with spring-boot-starter-web dependency.

2022-04-06 12:36:46.237  INFO 256621 --- [   scheduling-1] ScheduledService     : Starting scheduled job...
2022-04-06 12:36:49.496  INFO 256621 --- [ionShutdownHook] o.s.b.w.e.tomcat.GracefulShutdown        : Commencing graceful shutdown. Waiting for active requests to complete
2022-04-06 12:36:49.499  INFO 256621 --- [tomcat-shutdown] o.s.b.w.e.tomcat.GracefulShutdown        : Graceful shutdown complete
2022-04-06 12:36:49.506 ERROR 256621 --- [   scheduling-1] o.s.s.s.TaskUtils$LoggingErrorHandler    : Unexpected error occurred in scheduled task

java.lang.InterruptedException: sleep interrupted
	at java.base/java.lang.Thread.sleep(Native Method) ~[na:na]
	at java.base/java.lang.Thread.sleep(Thread.java:334) ~[na:na]
	at java.base/java.util.concurrent.TimeUnit.sleep(TimeUnit.java:446) ~[na:na]
	at ScheduledService.scheduled(ScheduledService.java:17) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) ~[spring-context-5.3.17.jar:5.3.17]
	at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.3.17.jar:5.3.17]
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[na:na]
	at java.base/java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:305) ~[na:na]
	at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java) ~[na:na]
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
	at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]
Process finished with exit code 130 (interrupted by signal 2: SIGINT)

Metadata

Metadata

Assignees

No one assigned

    Labels

    status: invalidAn issue that we don't feel is valid

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions