在Java EE中安排冗长的操作

问题描述 投票:0回答:1

每隔五分钟,我会检查是否需要进行后台处理。它可以正常工作,直到达到更长的运行时间。

@Resource
private ManagedExecutorService executorService;

@Schedule(hour="*", minute="*/5", second="0", persistent=false)
public void sometimesALengthyOperation() {
    ...
    executorService.submit(lengthyTask);
    ...
}

我已经使用ManagedExecutorService处理了此问题,但是当它花费的时间超过五分钟并开始执行第二个并行后台任务时,我不确定如何处理该问题。

我可以实现某种信号量,但是我希望它是ManagedExecutorService的一部分。确保我在这里只得到一个实例的“正确方法”是什么?

java java-ee
1个回答
0
投票

关于什么:为您的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 ...");
}


 }}
© www.soinside.com 2019 - 2024. All rights reserved.