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;
}