当它已经运行时不要运行作业

时间:2013-03-21 09:23:31

标签: liferay quartz-scheduler liferay-6

我在Liferay安排了一份工作,例如,如果这项工作每5分钟运行一次,需要5分多钟才能完成,Liferay如何处理呢?

我所观察到的是,这项工作将重新开始,这可能会给我带来麻烦。

当它已经全部运行时,是否有可能不触发作业?

*使用liferay 6.0.6

由于

2 个答案:

答案 0 :(得分:2)

尝试LockLocalServiceUtil及其方法lock()unlock()isLocked()。像这样:

try {
    if (LockLocalServiceUtil.isLocked()) {
        return;
    }
    LockLocalServiceUtil.lock();

    // do your job
} finally {
    LockLocalServiceUtil.unlock();
}

锁存储在数据库中,因此群集环境中没有问题。

答案 1 :(得分:0)

这可能不是最好的做法,但这里是

    private static boolean runningJob = false;
@Override
public void receive(Message arg0) throws MessageListenerException {

    if(runningJob)
        return;

    runningJob = true; //marking that a job just started
    //Do stuff  { ....... } // this might take a while
    runningJob = false;
}