【问题标题】:Dynamic scheduler in LiferayLiferay 中的动态调度器
【发布时间】:2016-03-31 22:24:18
【问题描述】:

我需要在Liferay中定期执行一个任务,我发现你可以创建一个实现MessageListener的类,在receive方法中你可以实现这个动作。直到这里它都很好,但在此之后编程你需要在liferay-portlet.xml 中执行它的时间,如果使用 xml 文件,我无法动态编辑持续时间。

有什么方法可以创建一个可以编程为从数据库动态获取调度持续时间值的任务?

我相信通过SchedulerEngineUtil 我必须能够做到这一点,但我不知道这是否正确或如何做到?

有谁知道我如何找到任何文档和一些示例?

提前致谢

【问题讨论】:

    标签: cron liferay liferay-6 scheduler


    【解决方案1】:

    确切地说,要定期执行任务,您必须实现 MessageListener 并在 liferay-portlet.xml 中执行以下操作 -

    <scheduler-entry> <scheduler-event-listener-class>com.#className</scheduler-event-listener-class> <trigger> <simple> <simple-trigger-value>1</simple-trigger-value> <time-unit>minute</time-unit> </simple> </trigger> </scheduler-entry>

    这将每 1 分钟触发一次事件侦听器类。因此请尝试使用此处的 Util 方法从 DB 获取数据。 让我知道这是否有帮助。

    【讨论】:

    【解决方案2】:

    要添加动态调度程序,您必须实现 MessageListener 并使用 SchedulerEngineHelperUtil 注册它:

    String pId = "portlet id here";  // TODO put portlet ID here
    
    Message msg = new Message();
    msg.put(SchedulerEngine.PORTLET_ID, pId);
    msg.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME, MyListener.class.getName());
    
    Trigger listener = new IntervalTrigger(MyListener.class.getName(), MyListener.class.getName(), 50);
    SchedulerEngineHelperUtil.schedule(
        listener, StorageType.PERSISTED, "some description",
        DestinationNames.SCHEDULER_DISPATCH, msg, 0);
    

    您可能还想阅读my answer also covering a solution for creating a static scheduled-task

    【讨论】:

      【解决方案3】:

      时间在 cronText 中设置,其中 12 是分钟,10 是小时。目前,这个 cronText 将其安排在每天上午 10:12。

      String portletId = "yourportlet_WAR_yourportlet";
      String cronText = "0 12 10 1/1 * ? *";
      
      Message message = new Message();
      message.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME, YourListenerClass.class.getName());
      message.put(SchedulerEngine.PORTLET_ID, portletId);
      message.put("portletId", portletId);
      
      SchedulerEngineHelperUtil.schedule(
          new CronTrigger("jobName", "jobGroup", cronText),
          StorageType.PERSISTED,
          "Message Scheduler Description",
          DestinationNames.SCHEDULER_DISPATCH,
          message,
          0);
      

      【讨论】:

        猜你喜欢
        • 2012-07-22
        • 1970-01-01
        • 1970-01-01
        • 2016-12-12
        • 2020-02-25
        • 2012-10-17
        • 1970-01-01
        • 1970-01-01
        • 2018-02-21
        相关资源
        最近更新 更多