我在Liferay安排了一份工作,例如,如果这项工作每5分钟运行一次,需要5分多钟才能完成,Liferay如何处理呢?
我所观察到的是,这项工作将重新开始,这可能会给我带来麻烦。
当它已经全部运行时,是否有可能不触发作业?
*使用liferay 6.0.6
由于
答案 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;
}