liferay
Erstellen Sie einen Quarz-Scheduler in Liferay
Suche…
Bemerkungen
Ein Scheduler dient dazu, Hintergrundaufgaben in bestimmten definierten Intervallen durchzuführen.
Wie im Liferay-Portlet DTD
<! - Das Element des Schedulereintrags enthält die deklarativen Daten eines Schedulers. ->
! ELEMENT Scheduler-Eintrag (Scheduler-Beschreibung ?, Scheduler-Event-Listener-Klasse, Trigger)
<! - Der Scheduler-Description-Wert beschreibt einen Scheduler. ->
! ELEMENT Scheduler-Beschreibung (#PCDATA)
<! - Der Wert der Scheduler-Event-Listener-Klasse muss eine Klasse sein, die com.liferay.portal.kernel.messaging.MessageListener implementiert. Diese Klasse erhält in regelmäßigen Abständen eine Nachricht, die vom Triggerelement festgelegt wird. ->
! ELEMENT Scheduler-Event-Listener-Klasse (#PCDATA)
<! - Das Auslöserelement enthält Konfigurationsdaten, um anzugeben, wann die in der Scheduler-Event-Listener-Klasse angegebene Klasse ausgelöst werden soll. ->
! ELEMENT-Auslöser (cron | simple)
Erstellen Sie einen Quarzplaner, um Informationen anzuzeigen
Um einen Scheduler anzulegen, muss der Eintrag in erstellt werden
liferay-portlet.xml
Bereitstellen der Scheduler-Klasse und des Triggerwerts für das Timing der Scheduler-Triggerung
<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>
Der angegebene Eintrag liefert
Scheduler-Beschreibung
Klassenname, der die MessageListener-Klasse implementiert
Trigger, der Intervalle zur Definition des Triggerpunkts für den Scheduler enthält
-Mit Cron
-Einfacher Triggerwert
In diesem Beispiel wird der Scheduler alle 5 Minuten ausgelöst.
Als nächstes müssen wir eine Scheduler-Klasse erstellen
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");
}
}
}
Dieser Scheduler zeigt einfach die Anzahl der Benutzer des Ausgabeportals nach jedem Triggerintervall an der Serverkonsole an.
Erstellen Sie programmgesteuert einen dynamischen Quarz-Scheduler
Es gibt bestimmte Szenarien, in denen wir möglicherweise einen Quartz-Scheduler erstellen müssen, basierend auf den Benutzereingaben, wann ein Scheduler ausgelöst werden sollte. Abgesehen von Fällen können wir Fälle behandeln, in denen bestimmte vordefinierte Funktionen vorhanden sind, die basierend ausgelöst werden müssen Benutzeraktion zu einem bestimmten Zeitraum.
In diesem Beispiel empfängt auf Triggerzeitgebung Benutzereingabe, eine scheduler.Here auslösen ScheduledJobListener Klasse imlements MessageListener , die Business - Logik enthält auf das Auslösen des scheduler.The Job ausgeführt werden soll mit SchedulerEngineHelperUtil Klasse den Auftrag auslösen, nachdem die erforderlichen params konfigurieren:
- Auslöser (unter Verwendung der Cron-Textzeichenfolge und des Auftragsnamens)
- Message (Verwendung der Implementierung für MessageListener-Klasse und PortletId)
- Scheduler-Speichertypen (standardmäßig MEMORY_CLUSTERED, können als PERSISTED zum Speichern in der DB festgelegt werden)
- DestinationNames (dies ist SCHEDULER_DISPATCH für Liferay), die das zu verwendende Message Bus-Ziel bestimmt
Das folgende Snippet ist Teil der Aktionsphase des Portlets, das mit dem Benutzer interagiert, um einen Quarzjob zu erstellen und zu planen.
//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();
}
Zum Erstellen von cron-Text werden hier Parameter aus Benutzereingaben abgerufen. Für den cron-Text können wir auch die angegebene Referenz zum Erstellen des cron-Musters verwenden
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.
Erstellen Sie direkt eine Crontext-Zeichenfolge, die basierend auf Benutzereingaben verwendet werden soll
String jobCronPattern="0 */5 * * * ?";
In diesem Fall wird es alle fünf Minuten ausgelöst.
Verweise: