2013-03-21 87 views
0

我有一份計劃在Liferay中的工作,例如,如果這項工作每5分鐘運行一次,需要超過5分鐘才能完成,那Liferay是如何處理的?當它已經在運行時不運行作業

我觀察到的是,工作將重新開始,這可能會導致我的問題。

在某種程度上,當它已經在運行時,是否可以不觸發任務?使用的Liferay 6.0.6

感謝

回答

2

嘗試LockLocalServiceUtil及其方法lock()unlock()isLocked()。例如:

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

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

鎖被存儲在數據庫中,所以在集羣環境中沒有問題。

+0

真棒,謝謝! 您能否提供更多信息? LockLocalServiceUtil.lock(long userId,String className,long key,String owner,boolean inheritable,long expirationTime)我猜expirationTime是以毫秒爲單位測量的嗎?所有者字段中需要什麼值? – 2013-03-25 08:06:05

+0

是的你是對的,expirationTime以milis爲單位。其實,我不知道你的確切用例,但對於我來說,一個'lock(String className,String key,String owner,boolean retrieveFromCache)'總是足夠的。如何使用它最簡單的方法是使用你的值填充_className_和_key_參數(僅僅根據這些參數調用'isLocked()'方法),並用一些String常量(比如「DEFAULT_OWNER」)和_retrieveFromCache_填充_owner_值爲false。然後你可以使用'unlock(String className,String key)'解鎖並且一切正常。 – 2013-03-25 18:23:15

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

這不會在羣集中工作我認爲:S對我來說這不是我可以使用的一種可能的解決方案。我沒有提到我的問題,它是聚集在一起,所以你solutian在理論上是好的我猜...感謝您的輸入! – 2013-03-22 13:02:41

相關問題