簡體   English   中英

Liferay-在用戶從門戶設置的時間安排作業

[英]Liferay - Scheduling a job at the time set by user from portal

我正在使用Liferay 6.2 CE GA4。 我一直在嘗試在Portlet的控制器中安排方法的執行。

我碰到很多教程,其中大部分教程提供的情況下,我們可以提供的Liferay-portlet.xml中的時候,像這個教程 但是我想讓用戶在門戶中配置時間。 這樣就有可能獲得時間並在我的constroller中實現一個簡單的調度工作。

編輯:我有一個像下面這樣的控制器,它可以完成調度工作。

public class MyController {
    @RenderMapping
    public String defaultView() {
        String cron = "0 0/1 * 1/1 * ? *";
        Date dt = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dt); 
        calendar.add(Calendar.MINUTE, 2);

        Trigger trigger = null;  
        try {  
            trigger = TriggerFactoryUtil.buildTrigger(TriggerType.CRON, Scheduler.class.getName(), Scheduler.class.getName(), calendar.getTime(), calendar.getTime(), cron);  
        } catch (SchedulerException e) {  
            e.printStackTrace();  
        }  
        Portlet portlet = PortletLocalServiceUtil.getPortletById("portlet_id");  
        Message message = new Message();  
        message.put("CONTEXT_PATH", portlet.getContextPath());  
        message.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME, Scheduler.class.getName());  
        message.put(SchedulerEngine.PORTLET_ID, portlet.getPortletId());  

        Scheduler scheduler = new Scheduler();
        MessageBusUtil.registerMessageListener(DestinationNames.SCHEDULER_DISPATCH, scheduler);
        try {  
            SchedulerEngineHelperUtil.schedule( trigger, StorageType.PERSISTED, "", DestinationNames.SCHEDULER_DISPATCH, message, 5);  
        } catch (SchedulerException e) {  
            e.printStackTrace();  
        }  

        return "view";
    }
}

上面的Scheduler類定義如下。

public class Scheduler implements MessageListener {
    @Override
    public void receive(Message message) throws MessageListenerException {
        myMethodAtScheduledTime();
    }

    public void myMethodAtScheduledTime() {
        System.out.println("Invoked at " + new Date());
    }
}

每10或20秒調用一次myMethodAtScheduledTime方法。 如何將通話限制為一次。 即恰好在日歷實例時間+ 2分鍾( calendar.add(Calendar.MINUTE, 2);

調度程序可以動態創建。

  1. 您要運行的任務必須實現MessageListener一個只有一個receive(Message)方法的接口。
  2. 可以通過SchedulerEngineHelperUtil#schedule方法注冊可配置的觸發器。 觸發器將消息偵聽器類和調用時間作為參數(以及其他參數)。

請參閱在liferay博客文章或此論壇文章中 動態創建調度程序以找到一些示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM