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: cron-trigger-value の代わりに property-key を使用し、「triger.key」を指定します

于 2013-06-21T10:29:57.903 に答える
0

Matthias の回答に同意します。これが私がそれを達成するために行ったことです、

  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 に答える