每隔五分钟,我会检查是否需要进行后台处理。它可以正常工作,直到达到更长的运行时间。
@Resource
private ManagedExecutorService executorService;
@Schedule(hour="*", minute="*/5", second="0", persistent=false)
public void sometimesALengthyOperation() {
...
executorService.submit(lengthyTask);
...
}
我已经使用ManagedExecutorService处理了此问题,但是当它花费的时间超过五分钟并开始执行第二个并行后台任务时,我不确定如何处理该问题。
我可以实现某种信号量,但是我希望它是ManagedExecutorService的一部分。确保我在这里只得到一个实例的“正确方法”是什么?
关于什么:为您的Scheduler-Bean使用@Singleton并设置一个属性,让其称为isRunning来检查它是否处于活动状态。....例如:
@Singleton
public class MySchedulerCanRunLongWithoutOverlapping{
private boolean isRunning = false;
@Schedule(hour="*", minute="*/5", second="0", persistent=false)
public void sometimesALengthyOperation() {
if(!isRunning){
isRunning = true;
.... do some long running stuff here ...
isRunning = false;
}
else {
//log.info("skipped, scheduler already running ...");
}
}}