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 に答える