Java 防止Spring启动计划程序关闭中的线程中断
我有一个spring boot应用程序,它使用Java 防止Spring启动计划程序关闭中的线程中断,java,spring-boot,Java,Spring Boot,我有一个spring boot应用程序,它使用@Scheduled注释按计划运行任务 关闭时,如果计划任务正在运行,我希望允许它完成 我首先在java运行时(runtime.getRuntime().addShutdownHook(…))中添加了一个shutdownhook,以简单地等待,但我的任务仍然被中断——几乎是立即中断的 因此,我开始研究这是否与计划任务有关,并尝试了以下方法: @Bean public TaskScheduler taskScheduler() {
@Scheduled
注释按计划运行任务
关闭时,如果计划任务正在运行,我希望允许它完成
我首先在java运行时(runtime.getRuntime().addShutdownHook(…)
)中添加了一个shutdownhook,以简单地等待,但我的任务仍然被中断——几乎是立即中断的
因此,我开始研究这是否与计划任务有关,并尝试了以下方法:
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setWaitForTasksToCompleteOnShutdown(true);
scheduler.setAwaitTerminationSeconds(60);
scheduler.initialize();
return scheduler;
}
问题是,这实际上似乎也没有保护正在运行的代码不受线程中断的影响,而且我仍然在计划任务中遇到了
意外错误,原因是java.lang.InterruptedException
和com.amazonaws.http.timers.client.SdkInterruptedException
我可能会添加一个关机钩子,它不会依赖于spring boot中的任何魔法,这是一个很好的例子:实际上我也有一个关机钩子,但它不起作用(这让我开始研究taskScheduler)