Spring - 计划任务 - 优雅关机

时间:2017-04-27 17:23:04

标签: java spring spring-mvc scheduled-tasks

我有一个Spring-Boot应用程序,其中一个bean以大约1分钟的间隔运行一个计划任务,并且这个bean有一个@PreDestroy方法。

在生命周期到达破坏前阶段之前,是否存在允许当前正在执行的任务完成 - 或至少给予一些时间完成 - 的解决方案?

3 个答案:

答案 0 :(得分:2)

您需要更新procedure ConvertFileToBase64(const AInFileName, AOutFileName: string); var inStream: TStream; outStream: TStream; begin inStream := TFileStream.Create(AInFileName, fmOpenRead); try outStream := TFileStream.Create(AOutFileName, fmCreate); try TNetEncoding.Base64.Encode(inStream, outStream); finally outStream.Free; end; finally inStream.Free; end; end; 的配置。对ThreadPoolTaskScheduler设置为true(方法waitForJobsToCompleteOnShutdown)。

来自文档:

  

设置是否等待计划任务在关闭时完成,而不是中断正在运行的任务并执行队列中的所有任务。   默认为“false”,通过中断正在进行的任务和清除队列立即关闭。如果您希望以较长的关闭阶段为代价完全完成任务,请将此标志切换为“true”。

答案 1 :(得分:2)

@Matej是对的。像这样的事情应该做的伎俩

 @Bean
  public ThreadPoolTaskScheduler setSchedulerToWait(ThreadPoolTaskScheduler threadPoolTaskScheduler){
   threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);
   return threadPoolTaskScheduler;
 }

答案 2 :(得分:1)

从Spring Boot 2.1.0开始,您可以使用:

TaskSchedulerCustomizer

ThreadPoolTaskScheduler将用于修改已配置的editList.add(new c_TakeTimeObjects(c_takeTimeObjects ));

详细信息:

  1. ExecutorConfigurationSupport
  2. TaskSchedulerCustomizer