我有一个Spring-Boot应用程序,其中一个bean以大约1分钟的间隔运行一个计划任务,并且这个bean有一个@PreDestroy
方法。
在生命周期到达破坏前阶段之前,是否存在允许当前正在执行的任务完成 - 或至少给予一些时间完成 - 的解决方案?
答案 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 ));
详细信息: