예를 들어이 작업이 5 분마다 실행되고 완료하는 데 5 분 이상이 소요되는 경우 Liferay에서 작업이 예약 되었습니까?이미 실행 중일 때 작업을 실행하지 않음
내가 관찰 한 것은 직업이 다시 시작된다는 것인데, 이것이 나를 위해 문제가 될 수 있습니다.
이미 실행 중일 때 작업을 트리거하지 않는 것이 가능합니까? 이 여기에 가장 좋은 방법 일 수 있지만하지 않을 수 있습니다을 Liferay에게 6.0.6
감사
예를 들어이 작업이 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;
}
이것은 내가 생각하는 클러스터에서 작동하지 않습니다. S는 사용할 수있는 해결책이 아닙니다. 나는 당신이 solutian 이론적으로 괜찮을 것 같아 그래서 클러스터 된 내 질문에 언급하지 않았다 ... 당신의 의견을 주셔서 감사합니다! –
끝내 주셔서 감사합니다! 좀 더 자세한 정보를 제공해 주시겠습니까? LockLocalServiceUtil.lock (긴 userId, String className, 긴 키, 문자열 소유자, 부울 상속, long expirationTime) 만료 시간은 밀리 초로 측정되는 것 같습니까? 소유자 필드에는 어떤 값이 필요합니까? –
예, 맞습니다 만료 시간은 밀리미터로 측정됩니다. 사실, 정확한 사용 사례를 모르지만, 나에게'lock (String className, String key, String owner, boolean retrieveFromCache)'가 항상 충분했다. 가장 간단한 방법은 _className_ 및 _key_ 매개 변수에 값 ('isLocked()'메소드 검사는이 매개 변수에 따라서 만)을 채우고 _owner_에는 일부 문자열 상수 (예 : "DEFAULT_OWNER") 및 _retrieveFromCache_를 false 값으로 채우는 것입니다. 그런 다음 unlock (String className, String key)'을 사용하여 잠금을 해제하면 모든 것이 잘 동작합니다. –