Heim >Java >javaLernprogramm >Mehrere Möglichkeiten des Java-Timers

Mehrere Möglichkeiten des Java-Timers

高洛峰
高洛峰Original
2016-12-16 13:19:061460Durchsuche

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

Eine MethodInvokingJobDetailFactoryBean verfügt über zwei Schlüsselattribute: targetObject gibt die Aufgabenklasse an und targetMethod gibt die auszuführende Methode an. Die folgenden Schritte sind die gleichen wie bei Methode 1. Der Vollständigkeit halber werden sie auch veröffentlicht.

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

2 Sekunden –>

00.

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

xmlns:task="http://www.springframework.org/schema/task"

. . . . . .

xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> >

Schritt 3: Spezifische Aufgaben in der Spring-Konfigurationsdatei festlegen

Xml-Code

< ;task:scheduled ref="taskJob" method="job1" cron="0 * * * * ?"/>

>

Erklärung: Der ref-Parameter gibt die Task-Klasse und die Methode an Gibt die Methoden, Cron- und CronExpression-Ausdrücke an, die ausgeführt werden müssen. Einzelheiten finden Sie im Anhang des vorherigen Artikels.

Selbstverständlich wird diese Konfiguration für Spring-Scanning-Anmerkungen verwendet.

Die Konfiguration ist hier abgeschlossen, ist das nicht ganz einfach?

Zweitens: Verwenden Sie das Anmerkungsformular

Vielleicht möchten wir es nicht jedes Mal in der XML-Datei konfigurieren, wenn wir eine Aufgabenklasse schreiben. Wir können die Anmerkung verwenden @Scheduled. Sehen Sie sich die Definition der Annotation in der Quelldatei an:

Java-Code

@Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation .ElementType.ANNOTATION_TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface Scheduled

{

Public Abstract String Cron();

Public Abstract Long FixedDelay();

Public Abstract Long FixedRate(); >}

Es ist ersichtlich, dass diese Annotation drei Methoden oder Parameter hat, die jeweils Folgendes bedeuten:

cron: Geben Sie den Cron-Ausdruck an

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

-package="com.gy.mytask" /> 🎜>

Hinweis: Theoretisch müssen Sie nur die Konfiguration von hinzufügen notwendig.

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

"0 * 14 * * ?" Wird jeden Tag von 14:00 bis 14:59 Uhr jede Minute ausgelöst

"0 0/5 14 * * ?" Jeden Tag Auslösung alle 5 Minuten von 14:00 bis 14:55 Uhr

"0 0/5 14,18 * * ?" Jeden Tag von 14:00 bis 14:55 Uhr und Auslösung alle 5 Minuten in den beiden Zeiträumen von 6:00 bis 6:55 Uhr

"0 0-5 14 * * ?" Einmal pro Minute von 14:00 bis 14:05 Uhr jeden Tag Auslöser

"0 10,44 14 ? 3 MI" Auslöser jeden Mittwoch im März um 14:10 und 14:44

" 0 15 10 ?

Weitere Artikel zu Java-Timer-Methoden finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn