Zoeken…


Opmerkingen

Een planner dient om achtergrondtaken op bepaalde gedefinieerde intervallen uit te voeren.

Volgens Liferay-portlet DTD

<! - Het invoerelement van de planner bevat de declaratieve gegevens van een planner. ->

! ELEMENT ingave van planner (plannerbeschrijving ?, scheduler-event-listener-class, trigger)

<! - De waarde van de plannerbeschrijving beschrijft een planner. ->

! ELEMENT planner-beschrijving (#PCDATA)

<! - De waarde van de scheduler-event-listener-class moet een klasse zijn die com.liferay.portal.kernel.messaging.MessageListener implementeert. Deze klasse ontvangt een bericht met een regelmatig interval dat wordt opgegeven door het trigger-element. ->

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

<! - Het triggerelement bevat configuratiegegevens om aan te geven wanneer de klasse moet worden geactiveerd die is opgegeven in scheduler-event-listener-class. ->

! ELEMENT trigger (cron | simple)

Maak een quartz-planner om wat informatie weer te geven

Om een planner te maken, moet het item worden aangemaakt in

liferay-portlet.xml

het bewijzen van de klasse van de planner en de triggerwaarde voor de timing van het triggeren van de planner

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

Het gegeven gegeven geeft

  1. Plannerbeschrijving

  2. Klasse naam, die MessageListener klasse implementeert

  3. Trigger, die intervallen biedt voor het definiëren van het triggerpunt voor de planner

    - Gebruik van Cron

    -Gebruik eenvoudige triggerwaarde

In het gegeven voorbeeld wordt de planner na elke 5 minuten geactiveerd.

Vervolgens moeten we een plannerklasse maken

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

}

Deze planner toont eenvoudig het aantal gebruikers van de outputportal na elk trigger-interval naar de serverconsole.

Maak programmatisch een dynamische quartz-planner

Er zijn specifieke scenario's waarin we mogelijk een Quartz-planner moeten maken, op basis van gebruikersinvoer wanneer een planner moet worden geactiveerd, behalve dat we gevallen kunnen afhandelen waarin we bepaalde vooraf gedefinieerde functionaliteiten hebben, die moeten worden geactiveerd op basis van gebruikersactie, op een bepaalde periode.

Dit voorbeeld ontvangt gebruikersinvoer voor triggertiming om een planner te activeren. Hier klasse ScheduledJobListener imlements MessageListener , die bedrijfslogica bevat die moet worden uitgevoerd bij het activeren van de planner. De taak wordt gepland met de klasse SchedulerEngineHelperUtil om de taak te activeren, na het configureren van de vereiste params:

  1. Trigger (met behulp van de cron-tekstreeks en taaknaam)
  2. Bericht (met behulp van implementatie voor MessageListener-klasse en portletId)
  3. Planningsopslagtypen (die standaard MEMORY_CLUSTERED is, kunnen worden ingesteld als PERSISTED om te worden opgeslagen in DB)
  4. DestinationNames (wat SCHEDULER_DISPATCH is voor Liferay) die beslist welke Message Bus-bestemming moet worden gebruikt

Het onderstaande fragment maakt deel uit van de actiefase van de portlet in interactie met de gebruiker om een quartz-taak te maken en in te plannen.

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

Hier, om cron-tekst te maken, worden params opgehaald uit gebruikersinvoer. Voor de cron-tekst kunnen we de gegeven referentie ook gebruiken voor het maken van het cron-patroon

    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.

en maak direct een crontext-string die moet worden gebruikt op basis van gebruikersinvoer

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

Hier in dit geval vuurt het na elke vijf minuten.

Referenties:

  1. Creatie van dynamische planners
  2. Planningsapplicatie
  3. Veelgestelde vragen over kwarts


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow