0

我在 Liferay 中安排了一个工作,例如,如果这个工作每 5 分钟运行一次并且需要超过 5 分钟才能完成,那么 Liferay 是如何处理它的?

我观察到工作将重新开始,这可能会给我带来问题。

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

*使用liferay 6.0.6

谢谢

4

2 回答 2

1

尝试LockLocalServiceUtil和它的方法lock()unlock()isLocked()。像这样的东西:

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

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

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

于 2013-03-24T17:32:28.490 回答
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;
}
于 2013-03-22T11:27:57.290 回答