我在 Liferay 中安排了一个工作,例如,如果这个工作每 5 分钟运行一次并且需要超过 5 分钟才能完成,那么 Liferay 是如何处理它的?
我观察到工作将重新开始,这可能会给我带来问题。
当它已经在运行时,是否有可能不触发作业?
*使用liferay 6.0.6
谢谢
我在 Liferay 中安排了一个工作,例如,如果这个工作每 5 分钟运行一次并且需要超过 5 分钟才能完成,那么 Liferay 是如何处理它的?
我观察到工作将重新开始,这可能会给我带来问题。
当它已经在运行时,是否有可能不触发作业?
*使用liferay 6.0.6
谢谢
尝试LockLocalServiceUtil
和它的方法lock()
,unlock()
和isLocked()
。像这样的东西:
try {
if (LockLocalServiceUtil.isLocked()) {
return;
}
LockLocalServiceUtil.lock();
// do your job
} finally {
LockLocalServiceUtil.unlock();
}
锁存储在数据库中,因此在集群环境中不会有问题。
这可能不是最佳实践,但这里有
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;
}