Liferay 6.1。是否可以将我的作业的cron表达式放在portal-ext.properties中?

Liferay 6.1。是否可以将我的作业的cron表达式放在portal-ext.properties中?,liferay,portlet,liferay-6,Liferay,Portlet,Liferay 6,我有一份工作 <portlet> <portlet-name>scheduled-actions</portlet-name> <scheduler-entry> <scheduler-event-listener-class>com.example.Example</scheduler-event-listener-class> <trigger>

我有一份工作

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

预定行动
com.example.example
0/15 * * * * ?
真的
是否可以将这个cron表达式(0/15****?)放在liferay-portlet.xml的portal-ext.properties中?如果是,如何在这里检索?
谢谢

可以在portlet.properties文件中添加密钥。我们已经实施了这一点

portlet.properties: 触发器。键=0/2***

liferay-portlet.xml:
使用属性键而不是cron触发器值并指定“triger.key”

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

portlet.properties: 触发器。键=0/2***

liferay-portlet.xml:
使用属性键而不是cron触发器值,并指定“triger.key”

同意Matthias的答案。以下是我为实现这一目标所做的工作

  • 将调度程序类扩展到MVCPortlet并实现到MessageListener接口
  • 现在,通过放置以下代码重写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();  
      }
    
  • 现在,您可以将逻辑放在receive()方法中

  • 最后,在liferay-portlet.xml中给出实现类的完整路径,如下所示

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

  • 希望这有帮助。

    同意马提亚的答案。以下是我为实现这一目标所做的工作

  • 将调度程序类扩展到MVCPortlet并实现到MessageListener接口
  • 现在,通过放置以下代码重写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();  
      }
    
  • 现在,您可以将逻辑放在receive()方法中

  • 最后,在liferay-portlet.xml中给出实现类的完整路径,如下所示

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

  • 希望这能有所帮助。

    我最近做了一些调查,因为我有类似的要求。我发现这在标准liferay中是不可能的,似乎您必须创建自己的QuartzTask。也许这个链接可以帮助你:,我最近做了一些调查,因为我有一个类似的要求。我发现这在标准liferay中是不可能的,似乎您必须创建自己的QuartzTask。也许这个链接可以帮助你:,