1

我有一个 cron 工作

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

是否可以将此 cron 表达式 (0/15 * * * * ?) 从 liferay-portlet.xml 放入 portal-ext.properties 中?如果是的话,如何在这里检索它?谢谢

4

2 回答 2

1

可以在 portlet.properties 文件中添加一个键。我们已经实现了这一点。

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

liferay-portlet.xml:使用 property-key 而不是 cron-trigger-value 并指定“triger.key”

于 2013-06-21T10:29:57.903 回答
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>
    

希望这可以帮助。

于 2015-05-08T10:24:31.820 回答