Heim >Java >javaLernprogramm >Mehrere Möglichkeiten des Java-Timers
Quarz
Frühling
Frühlingsaufgabe
Geplante Aufgabe
Anmerkung
Geplante Frühlingsaufgabe Mehrere Implementierungen von
In letzter Zeit müssen während der Projektentwicklung einige geplante Aufgaben ausgeführt werden. Beispielsweise ist es notwendig, die Protokollinformationen des Vortages am frühen Morgen eines jeden Tages zu analysieren . Ich habe diese Gelegenheit genutzt, um die geplanten Aufgaben zu klären. Da das Projekt das Spring-Framework verwendet, werde ich sie in Verbindung mit dem
Spring-Framework vorstellen.
1. Klassifizierung
Aus Sicht der Implementierungstechnologie gibt es derzeit drei Haupttechnologien (oder drei Produkte):
Die mit Java gelieferte Klasse java.util.Timer, Mit dieser Klasse können Sie eine java.util.TimerTask-Aufgabe planen. Mit dieser Methode kann Ihr Programm mit einer bestimmten Häufigkeit, jedoch nicht zu einem bestimmten Zeitpunkt ausgeführt werden. Im Allgemeinen weniger verwendet, wird in diesem Artikel nicht im Detail darauf eingegangen.
Verwenden Sie Quartz, einen relativ leistungsstarken Scheduler, der die Ausführung Ihres Programms zu einem bestimmten Zeitpunkt oder in einer bestimmten Häufigkeit ermöglicht. Die Konfiguration ist etwas kompliziert und wird später im Detail vorgestellt.
Die Aufgaben, die mit Spring 3.0 und höher geliefert werden, können als leichter Quarz betrachtet werden und sind viel einfacher zu verwenden als Quarz, der später vorgestellt wird.
In Bezug auf die Vererbungsmethoden von Jobklassen können diese in zwei Kategorien unterteilt werden:
Jobklassen müssen von einer bestimmten Jobklassen-Basisklasse erben, z Quartz. Von org.springframework.scheduling.quartz.QuartzJobBean; muss von java.util.TimerTask erben.
Die Jobklasse ist eine gewöhnliche Java-Klasse und muss nicht von einer Basisklasse erben.
Hinweis: Ich persönlich empfehle die Verwendung der zweiten Methode, da alle Klassen gemeinsame Klassen sind und nicht im Vorfeld unterschiedlich behandelt werden müssen.
Aus dem Trigger-Timing der Aufgabenplanung werden hier hauptsächlich Trigger für Jobs verwendet. Es gibt hauptsächlich zwei Arten:
Triggert einmal zu jeder angegebenen Zeit. Der entsprechende Trigger in Quartz ist: org.springframework.scheduling.quartz.SimpleTriggerBean
Triggert einmal zu jeder angegebenen Zeit. Der entsprechende Trigger ist: org.springframework.scheduling .quartz.CronTriggerBean
Hinweis: Nicht jede Aufgabe kann diese beiden Trigger verwenden. Beispielsweise kann die Aufgabe java.util.TimerTask nur den ersten verwenden. Sowohl die Quarz- als auch die Federaufgabe können diese beiden Auslösebedingungen unterstützen.
2. Gebrauchsanweisung
Stellen Sie detailliert vor, wie Sie die einzelnen Aufgabenplanungstools verwenden, einschließlich Quarz- und Frühlingsaufgaben.
Quartz
Zuerst erbt die Jobklasse von einer bestimmten Basisklasse: org.springframework.scheduling.quartz.QuartzJobBean.
Schritt 1: Jobklasse definieren
Java-Code
org.quartz importieren. JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class Job1 erweitert QuartzJobBean {
private int timeout;
private static int i = 0;
//Nachdem die Planungsfabrik instanziiert wurde, beginnt die Planung nach der Timeout-Zeit
public void setTimeout(int timeout) {
this.timeout = timeout;
}
/**
* Spezifische Aufgaben, die geplant werden müssen
*/
@Override
protected voidexecuteInternal(JobExecutionContext context)
throws JobExecutionException {
System.out.println("Geplante Aufgabenausführung...");
}
}
Schritt 2: Konfigurieren Sie die Jobklasse JobDetailBean in der Spring-Konfigurationsdatei
Xml-Code
< ;bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean">
Beschreibung: org.springframework .scheduling.quartz .JobDetailBean verfügt über zwei Attribute: Das Attribut „jobClass“ ist die Aufgabenklasse, die wir im Java-Code definiert haben, und das Attribut „jobDataAsMap“ ist der Attributwert, der in die Aufgabenklasse eingefügt werden muss.
Schritt 3: Konfigurieren Sie die Auslösemethode (Trigger) der Jobplanung
Es gibt zwei Arten von Job-Triggern in Quartz, nämlich
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean
Das erste SimpleTriggerBean unterstützt nur das Aufrufen von Aufgaben mit einer bestimmten Häufigkeit, z. B. die Ausführung einmal alle 30 Minuten.
Die Konfigurationsmethode ist wie folgt:
Xml-Code
Der zweite Typ von CronTriggerBean unterstützt die einmalige Ausführung zu einer bestimmten Zeit, beispielsweise einmal täglich um 12:00 Uhr.
Die Konfigurationsmethode ist wie folgt:
Xml-Code
Informationen zum cronExpression-Ausdruck finden Sie im Anhang zur Syntax. Schritt 4: Konfigurieren Sie die Scheduling Factory Xml-Code
Beschreibung: Dieser Parameter gibt den zuvor konfigurierten Trigger an des Geräts.
Schritt 5: Starten Sie einfach Ihre Anwendung, d. h. stellen Sie das Projekt in Tomcat oder anderen Containern bereit.
Zweitens erbt die Jobklasse keine bestimmte Basisklasse.
Spring kann diesen Ansatz dank zweier Klassen unterstützen:
org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
Diese beiden Klassen entsprechen jeweils den beiden oben genannten Möglichkeiten zur Implementierung der von Spring unterstützten Aufgabenplanung Timer-Task-Methode und Quartz-Methode, die mit Java geliefert werden. Hier schreibe ich nur über die Verwendung von MethodInvokingJobDetailFactoryBean. Der Vorteil der Verwendung dieser Klasse besteht darin, dass unsere Aufgabenklasse nicht mehr von einer Klasse erben muss, sondern ein gewöhnliches Pojo ist.
Schritt eins: Aufgabenklasse schreiben
Java-Code
public class Job2 {
public void doJob2() {
System.out.println("Erbt den QuartzJobBean-Modus nicht - Planung läuft...");
}
}
Wie Sie sehen, ist dies eine gewöhnliche Klasse und verfügt über eine Methode.
Schritt 2: Jobklasse konfigurieren
Xml-Code
class=" org .springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> Schritt 3: Konfigurieren Sie die Auslösemethode (Trigger) der Jobplanung Es gibt zwei Arten von Job-Triggern in Quartz, nämlich org.springframework.scheduling.quartz.SimpleTriggerBean org.springframework.scheduling.quartz.CronTriggerBean Das erste SimpleTriggerBean unterstützt nur das Aufrufen von Aufgaben mit einer bestimmten Häufigkeit, z. B. die Ausführung einmal alle 30 Minuten. Die Konfigurationsmethode ist wie folgt: Xml-Code
Die Konfigurationsmethode ist wie folgt:
Xml-Code
Sie können je nach tatsächlicher Situation eine der beiden oben genannten Planungsmethoden auswählen.
Schritt 4: Konfigurieren Sie die Scheduling Factory
Xml-Code
Schritt 5: Starten Sie einfach Ihre Anwendung, d. h. stellen Sie das Projekt in Tomcat oder anderen Containern bereit.
Zu diesem Zeitpunkt wurde die Grundkonfiguration von Quartz im Frühjahr eingeführt. Bevor Sie es verwenden können, müssen Sie es natürlich importieren entsprechendes Federpaket Beim Quartz-Paket ist das eine Selbstverständlichkeit.
Tatsächlich ist zu erkennen, dass die Konfiguration von Quartz auf keinen Fall kompliziert erscheint, da Quartz eigentlich ein Schwergewichtswerkzeug ist, wenn wir nur ein paar davon ausführen wollen einfache Timings Aufgabe, gibt es ein einfacheres Tool?
Bitte sehen Sie sich unten meine Einführung zur Frühlingsaufgabe an.
Frühlingsaufgabe
Im vorherigen Abschnitt wurde die Verwendung von Quarz im Frühling vorgestellt. In diesem Artikel wird die Autonomie danach vorgestellt Spring 3.0 Das entwickelte Tool für geplante Aufgaben, Spring Task, kann mit einem leichten Quartz verglichen werden und ist sehr einfach zu verwenden. Es erfordert keine zusätzlichen Pakete außer Spring-bezogenen Paketen und unterstützt sowohl Anmerkungen als auch Konfigurationsdateien
Form, diese beiden Methoden werden im Folgenden vorgestellt.
Der erste Weg: Konfigurationsdateimethode
Der erste Schritt: Schreiben Sie die Jobklasse
ist ein gewöhnliches Pojo, wie folgt:
Java-Code
import org.springframework.stereotype.Service;
@Service
public class TaskJob { >
public void job1() { System.out.println("Aufgabe in Bearbeitung..."); 🎜> Schritt 2: Namespace und Beschreibung im Header der Spring-Konfigurationsdatei hinzufügen Xml-Code
Schritt 3: Spezifische Aufgaben in der Spring-Konfigurationsdatei festlegen
Xml-Code
< ;task:scheduled ref="taskJob" method="job1" cron="0 * * * * ?"/>
>
fixedDelay: Offizielle Dokumenterklärung: Ein intervallbasierter Trigger, bei dem das Intervall vom Abschluss der vorherigen Aufgabe bis zum Start gemessen wird das nächste Aufgabenintervall in Millisekunden.
fixedRate: Offizielle Dokumenterklärung: Ein intervallbasierter Trigger, bei dem das Intervall ab der Startzeit der vorherigen Aufgabe gemessen wird. Das heißt, von the previous Das Intervall zwischen dem Start einer Aufgabe und dem Start der nächsten Aufgabe in Millisekunden.
Lass es mich konfigurieren.
Schritt 1: Pojo schreiben
Java-Code
import org.springframework.scheduling.annotation.Scheduled;
import org .springframework.stereotype.Component;
@Component("taskJob")
public class TaskJob {
@Scheduled(cron = "0 0 3 * * ?")
public void job1() {
System.out.println("Task in progress...");
}
}
Schritt 2: Aufgabenbezogene Konfiguration hinzufügen:
Xml-Code
xmlns:xsi="http:/ /www .w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework .org /schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework .org /schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans /spring -beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd http: //www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/ schema/ Aufgabe http://www.springframework.org/schema/task/spring-task-3.0.xsd" default-lazy-init="false"> Hinweis: Theoretisch müssen Sie nur die Konfiguration von Ok, die Konfiguration ist abgeschlossen. Ich werde sie natürlich noch nicht einzeln erklären Weitere Informationen finden Sie im XSD-Dokument http://www.springframework.org/schema/task/spring-task-3.0.xsd. Anhang: cronExpression-Konfigurationsanweisungen, für spezifische Verwendung und Parameter bitte Baidu googeln Feld Erlaubte Werte Erlaubte Sonderzeichen Sekunden 0-59 , - * / Minuten 0-59 , - * / Stunde 0-23 , - * / Datum 1-31 , - * ? / L W C Monat 1-12 oder JAN-DEZ , - * / Woche 1-7 oder SO-SA , - * ? / L C # Jahr (optional) Leer lassen, 1970-2099 , - * / - Bereich * Platzhalter ? Sie möchten dieses Feld nicht festlegen Das Folgende sind nur einige Beispiele CRON-Ausdruck Bedeutung "0 0 12 * * ?" Wird jeden Tag um 12 Uhr ausgelöst "0 15 10 ? * *" Wird jeden Morgen um 10:15 Uhr "0 15 10 * * ?" Wird jeden Morgen um 10:15 Uhr "0 ausgelöst 15 10 *** >