Поиск…


замечания

Планировщик служит для выполнения фоновых задач с определенными интервалами.

В соответствии с портлетом Liferay DTD

<! - Элемент записи планировщика содержит декларативные данные планировщика. ->

! ELEMENT scheduler-entry (scheduler-description ?, scheduler-event-listener-class, trigger)

<! - Значение описания планировщика описывает планировщик. ->

! ELEMENT scheduler-description (#PCDATA)

<! - Значение класса scheduler-event-listener должно быть классом, который реализует com.liferay.portal.kernel.messaging.MessageListener. Этот класс получит сообщение с регулярным интервалом, заданным триггерным элементом. ->

! ELEMENT scheduler-event-listener-class (#PCDATA)

<! - Триггерный элемент содержит данные конфигурации, указывающие, когда запускать класс, указанный в классе scheduler-event-listener. ->

! ELEMENT триггер (cron | простой)

Создайте планировщик кварца, чтобы отобразить некоторую информацию

Чтобы создать планировщик, запись должна быть создана в

liferay-portlet.xml

класс прогнозирования планировщика и значение триггера для синхронизации запуска планировщика

<portlet-name>GetSetGo</portlet-name>
        <icon>/icon.png</icon>
        <scheduler-entry>
        <scheduler-description>This scheduler logs User count from portal</scheduler-description>
            <scheduler-event-listener-class>com.example.scheduler.SchedulerSample</scheduler-event-listener-class>
            <trigger>
                 <simple>
                   <simple-trigger-value>
                     5
                   </simple-trigger-value>
                <time-unit>minute</time-unit>
            </simple>
            </trigger>
        </scheduler-entry>

Данная запись дает

  1. Описание планировщика

  2. Имя класса, которое реализует класс MessageListener

  3. Триггер, который предоставляет интервалы для определения точки запуска для планировщика

    -Использование Cron

    -Использование Простое значение триггера

В данном примере планировщик запускается через каждые 5 минут.

Затем нам нужно создать класс планировщика

package com.example.scheduler;

import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.messaging.Message;
import com.liferay.portal.kernel.messaging.MessageListener;
import com.liferay.portal.kernel.messaging.MessageListenerException;
import com.liferay.portal.service.UserLocalServiceUtil;

public class SchedulerSample implements MessageListener {

    @Override
    public void receive(Message arg0) throws MessageListenerException {
        Log log=LogFactoryUtil.getLog(SchedulerSample.class);
        
        try {
            log.info("User Count for portal:"+UserLocalServiceUtil.getUsersCount());
        } catch (SystemException e) {
            
            log.info("User count is currently unavailable");
        }
        
    }

}

Этот планировщик просто отображает счетчик посетителей портала после каждого интервала триггера на серверную консоль.

Создавать динамический планировщик кварца

Существуют конкретные сценарии, в которых нам может понадобиться создать планировщик Quartz, основанный на пользовательском вводе, когда должен запускаться планировщик, кроме случаев, когда мы можем обрабатывать случаи, когда у нас есть определенные предопределенные функциональные возможности, которые необходимо запускать на основе действие пользователя, в определенный период.

В этом примере вводится пользовательский ввод времени запуска, чтобы запускать планировщик. В этом случае класс ScheduledJobListener imlements MessageListener , который содержит бизнес-логику для запуска при запуске планировщика. imlements MessageListener запланировано с использованием класса SchedulerEngineHelperUtil для запуска задания после настройки необходимых параметров:

  1. Триггер (с использованием текстовой строки cron и имени задания)
  2. Сообщение (с использованием реализации для класса MessageListener и portletId)
  3. Типы хранилищ планировщика (по умолчанию MEMORY_CLUSTERED могут быть установлены как PERSISTED для хранения в БД)
  4. DestinationNames (который является SCHEDULER_DISPATCH для Liferay), который принимает решение о назначении адресата сообщений

Следующий фрагмент является частью фазы действия портлета, взаимодействующего с пользователем, для создания и планирования задания кварца.

   //Dynamic scheduling
    String portletId= (String)req.getAttribute(WebKeys.PORTLET_ID);
                  
    String jobName= ScheduledJobListener.class.getName();
           
    Calendar startCalendar = new GregorianCalendar(year , month, day, hh, mm, ss);
    String jobCronPattern = SchedulerEngineHelperUtil.getCronText(startCalendar, false);
                                //Calendar object & flag for time zone sensitive calendar
    
    Trigger trigger=new CronTrigger(ScheduledJobListener.class.getName(),ScheduledJobListener.class.getName(), jobCronPattern);
            
    Message message=new Message();
    message.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME,jobName);
    message.put(SchedulerEngine.PORTLET_ID, portletId);
    
    try {
          SchedulerEngineHelperUtil.schedule(
                trigger,StorageType.PERSISTED,"Message_Desc",DestinationNames.SCHEDULER_DISPATCH,
                message,0);                    
         } catch (SchedulerException e) 
                {
                    e.printStackTrace();
                }

Здесь, для создания текста cron, параметры извлекаются из пользовательского ввода. Для текста cron мы также можем использовать данную ссылку для создания диаграммы cron

    1. Seconds
    2. Minutes
    3. Hours
    4. Day-of-Month
    5. Month
    6. Day-of-Week
    7. Year (optional field)
    **Expression**     **Meaning**
    0 0 12 * * ?     Fire at 12pm (noon) every day
    0 15 10 ? * *     Fire at 10:15am every day
    0 15 10 * * ?     Fire at 10:15am every day
    0 15 10 * * ? *     Fire at 10:15am every day
    0 15 10 * * ? 2005     Fire at 10:15am every day during the year 2005
    0 * 14 * * ?     Fire every minute starting at 2pm and ending at 2:59pm, every day
    0 0/5 14 * * ?     Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day
    0 0/5 14,18 * * ?     Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day
    0 0-5 14 * * ?     Fire every minute starting at 2pm and ending at 2:05pm, every day
    0 10,44 14 ? 3 WED     Fire at 2:10pm and at 2:44pm every Wednesday in the month of March.
    0 15 10 ? * MON-FRI     Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday
    0 15 10 15 * ?     Fire at 10:15am on the 15th day of every month
    0 15 10 L * ?     Fire at 10:15am on the last day of every month
    0 15 10 L-2 * ?     Fire at 10:15am on the 2nd-to-last last day of every month
    0 15 10 ? * 6L     Fire at 10:15am on the last Friday of every month
    0 15 10 ? * 6L     Fire at 10:15am on the last Friday of every month
    0 15 10 ? * 6L 2002-2005     Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005
    0 15 10 ? * 6#3     Fire at 10:15am on the third Friday of every month
    0 0 12 1/5 * ?     Fire at 12pm (noon) every 5 days every month, starting on the first day of the month.
    0 11 11 11 11 ?     Fire every November 11th at 11:11am.

и непосредственно создать строку crontext, которая будет использоваться на основе пользовательского ввода

 String jobCronPattern="0 */5 * * * ?";

Здесь в этом случае он срабатывает каждые пять минут.

Рекомендации:

  1. Создание динамического планировщика
  2. Планировщик
  3. Часто задаваемые вопросы о квартете


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow