Recherche…


Remarques

Un planificateur permet d'effectuer des tâches en arrière-plan à certains intervalles définis.

Selon la DTD du portlet Liferay

<! - L'élément scheduler-entry contient les données déclaratives d'un planificateur. ->

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

<! - La valeur de description du planificateur décrit un planificateur. ->

! ELEMENT scheduler-description (#PCDATA)

<! - La valeur scheduler-event-listener-class doit être une classe qui implémente com.liferay.portal.kernel.messaging.MessageListener. Cette classe recevra un message à un intervalle régulier spécifié par l'élément déclencheur. ->

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

<! - L'élément trigger contient des données de configuration pour indiquer quand déclencher la classe spécifiée dans scheduler-event-listener-class. ->

! ELEMENT trigger (cron | simple)

Créer un planificateur de quartz pour afficher des informations

Pour créer un planificateur, l’entrée doit être créée dans

liferay-portlet.xml

vérification de la classe du planificateur et de la valeur de déclenchement pour la synchronisation du déclenchement du planificateur

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

L'entrée donnée fournit

  1. Description du planificateur

  2. Nom de classe, qui implémente la classe MessageListener

  3. Déclencheur, qui fournit des intervalles pour définir le point de déclenchement du planificateur

    -Utiliser Cron

    -Utilisation de la valeur de déclenchement simple

Dans l'exemple donné, le planificateur se déclenchera toutes les 5 minutes.

Ensuite, nous devons créer une classe de planificateur

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");
        }
        
    }

}

Ce planificateur affiche simplement le nombre d'utilisateurs du portail de sortie après chaque intervalle de déclenchement sur la console du serveur.

Créer un planificateur de quartz dynamique par programmation

Il existe des scénarios spécifiques dans lesquels nous pourrions avoir besoin de créer un ordonnanceur Quartz, basé sur les entrées des utilisateurs sur le moment où un ordonnanceur doit être déclenché, à part que nous pouvons gérer des cas, avec certaines fonctionnalités prédéfinies qui doivent être déclenchées action de l'utilisateur, à une certaine période.

Cet exemple reçoit une entrée utilisateur au moment du déclenchement, pour déclencher un scheduler.Here ScheduledJobListener class imlements MessageListener , qui contient la logique métier à exécuter lors du déclenchement du planificateur. Le travail est planifié à l'aide de SchedulerEngineHelperUtil classe SchedulerEngineHelperUtil

  1. Déclencheur (en utilisant la chaîne de texte cron et le nom du travail)
  2. Message (utilisant l'implémentation pour la classe MessageListener et portletId)
  3. Types de stockage du planificateur (qui est MEMORY_CLUSTERED par défaut, peuvent être définis comme PERSISTED pour être stockés dans la base de données)
  4. DestinationNames (qui est SCHEDULER_DISPATCH pour Liferay) qui décide de la destination du Message Bus à utiliser

L'extrait de code ci-dessous fait partie de la phase d'action du portlet qui interagit avec l'utilisateur pour créer et planifier un travail quartz.

   //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();
                }

Ici, pour créer du texte cron, les paramètres sont récupérés à partir de l'entrée utilisateur. Pour le texte cron, nous pouvons également utiliser la référence donnée pour créer le modèle 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.

et créer directement une chaîne de crontext à utiliser en fonction de l'entrée de l'utilisateur

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

Ici, dans ce cas, il se déclenche toutes les cinq minutes.

Les références:

  1. Création de planificateur dynamique
  2. Application de planification
  3. FAQ sur le quartz


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow