2012-11-19 17 views
1

我有一個cron作業Liferay 6.1。是否有可能把我的工作cron表達式在portal-ext.properties中?

<portlet> 
    <portlet-name>scheduled-actions</portlet-name> 
    <scheduler-entry> 
     <scheduler-event-listener-class>com.example.Example</scheduler-event-listener-class> 
     <trigger> 
      <cron> 
       <cron-trigger-value>0/15 * * * * ?</cron-trigger-value> 
      </cron> 
     </trigger> 
    </scheduler-entry> 
    <system>true</system> 
</portlet> 

是否有可能把從Liferay的-portlet.xml的portal-ext.properties這個cron表達式(0/15 * *?)?如果它在這裏如何檢索它? 謝謝

+1

因爲我有類似的要求,所以我一直在調查一下。我發現這對於標準liferay來說是不可能的,看起來你必須創建自己的QuartzTask。也許這個鏈接可以幫助你:[Liferay Board](http://www.liferay.com/community/forums//message_boards/message/3210146),[Dynamic Quartz Task](http://xebee.xebia.in/2012/06/15 /創建,更新和刪除的作業,動態的石英/) –

回答

1

可以在portlet.properties文件中添加一個鍵。我們已經實施了這個。

portlet.properties: trigger.key = 0 0/2 * * *?

的Liferay-portlet.xml中: 使用屬性鍵,而不是cron的觸發值,並指定 「triger.key」

0

同意並馬蒂亞斯答案。這是我爲實現它所做的,

  1. 將您的調度程序類擴展到MVCPortlet並實現到MessageListener接口。
  2. 現在,覆蓋的init()通過將下面的代碼方法,

    String cron = "0 0/1 * 1/1 * ? *";// You can read it from portal-ext.properties using PropsUtil 
    Trigger trigger = null; 
    try { 
    trigger = TriggerFactoryUtil.buildTrigger(TriggerType.CRON, EngageMailScheduler.class.getName(), EngageMailScheduler.class.getName(), new Date(), null, cron); 
        } catch (SchedulerException e) { 
        e.printStackTrace(); 
        } 
    
        Message message = new Message(); 
        message.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME, EngageMailScheduler.class.getName()); 
        message.put(SchedulerEngine.PORTLET_ID, portlet.getPortletId()); 
    
        try { 
    //In Liferay 6.1 use SchedulerEngineUtil, it is deprecated in Liferay 6.2 
        SchedulerEngineHelperUtil.schedule(trigger, StorageType.PERSISTED, "", "liferay/scheduler_dispatch", message, 5); 
        } catch (SchedulerException e) { 
        e.printStackTrace(); 
        } 
    
  3. 現在,你可以把你的邏輯在receive()方法,

    public void receive(Message message) throws MessageListenerException { 
        LOGGER.info("IN: Dynamic scheduler"); 
    } 
    
  4. 最後,給在Liferay中-portlet.xml中的實現類的完整路徑,如下

    <portlet-class>com.test.MyScheduler</portlet-class> 
    

希望這會有所幫助。

相關問題