Heim  >  Artikel  >  Java  >  Verwendungsanweisungen für im Frühling geplante Aufgaben

Verwendungsanweisungen für im Frühling geplante Aufgaben

零下一度
零下一度Original
2017-06-30 10:37:121379Durchsuche

1. Klassifizierung

  • Aus Sicht der Implementierungstechnologie gibt es derzeit drei Haupttechnologien:

  1. Java-eigenes Java-Dienstprogramm .Timer-Klasse. 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.

  2. Verwenden Sie Quartz, einen relativ leistungsstarken Scheduler, der es ermöglicht, Ihr Programm zu einem bestimmten Zeitpunkt oder in einer bestimmten Häufigkeit auszuführen. Die Konfiguration ist etwas kompliziert.

  3. Die Aufgaben, die mit Spring 3.0 und höher geliefert werden, können als leichter Quartz betrachtet werden und sind viel einfacher zu verwenden als Quartz.

  • Aufgrund der Vererbungsmethode der Jobklasse kann sie in zwei Kategorien unterteilt werden:

  1. Job-Klassen müssen von einer bestimmten Job-Klasse-Basisklasse erben. Beispielsweise muss Quartz von org.springframework.scheduling.quartz.QuartzJobBean erben; java.util.Timer muss von java.util.TimerTask erben.

  2. 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 die für Jobs verwendeten Trigger verwendet. Es gibt hauptsächlich die folgenden zwei Typen:
  1. wird zu jeder angegebenen Zeit ausgelöst. Der entsprechende Auslöser in Quartz ist: org.springframework.scheduling.quartz.SimpleTriggerBean

  2. Alles wird einmal ausgelöst zum angegebenen Zeitpunkt. Der entsprechende Scheduler in Quartz ist: org.springframework.scheduling.quartz.CronTriggerBean

Hinweis: Nicht jede Aufgabe kann diese beiden Trigger verwenden .TimerTask-Aufgaben können nur die erste 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: Definieren Sie die Jobklasse

Java-Code Verwendungsanweisungen für im Frühling geplante Aufgaben
  1. import org.quartz.JobExecutionContext; >

  2. import org.springframework.scheduling.quartz.QuartzJobBean; >
  3. privat int timeout

  4. private static int i = 0;

  5. //After the Die Planungsfabrik wird instanziiert, die Planung beginnt nach der Timeout-Zeit

  6. public
  7. void setTimeout(

    int timeout) { this.timeout = timeout;

  8. }

  9. /**

  10. * Spezifische Aufgaben, die geplant werden sollen

  11. */ 

  12. @Override
  13. protected
  14. voidexecuteInternal(JobExecutionContext context)

  15. wirft JobExecutionException {

  16. System.out.println(

    "Geplante Aufgabenausführung...");

  17. }

    }

  18. Schritt 2: Konfigurieren Sie die Jobklasse JobDetailBean in der Spring-Konfigurationsdatei

  19. Xml-Code

    1. bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean">  

    2. Eigenschaft name= "jobClass" value="com.gy.Job1" />  

    3. Eigenschaft name= „jobDataAsMap“>  

    4. Karte>  

    5. Eintrag key="timeout" value=" 0" />  

    6. Karte>  

    7. Eigenschaft>  

    8. Bohne>  

 说明:org.springframework.scheduling.quartz.JobDetailBean有两个属性,jobClass属性即我们在java代码中定义的任务类,jobDataAsMap属性即该任务类中需要注入的属性值.

第三步:配置作业调度的触发方式(触发器)

Quarz的作业触发器有两种,分别是

org.springframework.scheduling.quartz.SimpleTriggerBean

org.springframework.scheduling.quartz.CronTriggerBean

第一种SimpleTriggerBean,只支持按照一定频度调用任务,如每隔30分钟运行一次.

配置方式如下:

 

Xml代码  Verwendungsanweisungen für im Frühling geplante Aufgaben
  1. bean id="simpleTrigger" class="org.springframework.scheduling. quartz.SimpleTriggerBean">  

  2. Eigenschaft name= "jobDetail" ref="job1" />  

  3. Eigenschaft name= "startDelay" value="0" />  

  4. property name= "repeatInterval" value="2000" />  

  5. Bohne> ;  

第二种CronTriggerBean, 支持到指定时间运行一次, 如每天12:00运行一次等。

配置方式如下:

Xml代码  Verwendungsanweisungen für im Frühling geplante Aufgaben
  1. bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

  2. Eigenschaft name= "jobDetail" ref="job1" > >property

  3. name=
  4. "cronExpression"

    value="0 0 12 * * ?" /> >

  5. bean 🎜> Die Syntax des cronExpression-Ausdrucks finden Sie im Anhang. Schritt 4: Planungsfabrik konfigurieren Xml-Code

  6. bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

property

name=
"triggers"
>
Verwendungsanweisungen für im Frühling geplante Aufgaben
  1. list> >ref bean="cronTrigger" /> >

    list
  2. >                                       Beschreibung: Dieser Parameter gibt den Namen des zuvor konfigurierten Triggers an.
  3. 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:

  4. org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean
  5. org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBeanDiese beiden Klassen entsprechen jeweils den beiden von Spring unterstützten Methoden der Aufgabenplanung, nämlich der Timer-Aufgabenmethode und der Quartz-Methode, die wie oben erwähnt 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

  6. Java-Code public class Job2 {

  7. public void doJob2() {

  8. System.out.println(
  9. "Erbt die QuartzJobBean-Methode nicht - Planung läuft...");

    }

  10. }
  11. Wie Sie sehen, ist dies eine gewöhnliche Klasse und hat eine Methode. Schritt 2: Jobklasse konfigurieren

Xml-Code

  1. bean id="job2"  

  2. class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  

  3. property name="targetObject">  

  4. bean class="com.gy.Job2 " />  

  5. Eigenschaft>  

  6. property name="targetMethod" value=" doJob2" />  

  7. Eigenschaft name= "concurrent" value="false" />  

  8. Bohne> ;  

 说明:有两个关键属性:targetObject ist die neueste Version von targetMethod的方法.往下的步骤就与方法一相同了,为了完整,同样贴出.

第三步:配置作业调度的触发方式(触发器)

Quartz的作业触发器有两种,分别是

org.springframework.scheduling.quartz.SimpleTriggerBean

org.springframework.scheduling.quartz.CronTriggerBean

第一种SimpleTriggerBean,只支持按照一定频度调用任务,如每隔30分钟运行一次。

配置方式如下:

Xml代码  Verwendungsanweisungen für im Frühling geplante Aufgaben
  1. bean id="simpleTrigger" class="org.springframework.scheduling.quartz .SimpleTriggerBean">  

  2. Eigenschaft name= "jobDetail" ref="job2" />  

  3. Eigenschaft name= "startDelay" value="0" />  

  4. property name= "repeatInterval" value="2000" />  

  5. Bohne> ;  

 第二种CronTriggerBean, 支持到指定时间运行一次, 如每天12:00运行一次等。

配置方式如下:

Xml代码  Verwendungsanweisungen für im Frühling geplante Aufgaben
  1. bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

  2. Eigenschaft name= "jobDetail" ref="job2"

  3. >
  4. Eigenschaft name="cronExpression" value="0 0 12 * * ?" /> >bean> Sie können je nach tatsächlicher Situation eine der beiden oben genannten Planungsmethoden auswählen.

  5. Schritt 4: Planungsfabrik konfigurieren
  6. Xml-Code

bean

class=

"org.springframework.scheduling.quartz.SchedulerFactoryBean">

Verwendungsanweisungen für im Frühling geplante Aufgaben
  1. property name="triggers">
  2. list> >ref bean="cronTrigger" /> >list>
  3. Erklärung: Dieser Parameter gibt den Namen des zuvor konfigurierten Triggers an.
  4. 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 in Spring eingeführt. Natürlich müssen Sie vor der Verwendung das entsprechende Spring-Paket und das Quartz-Paket importieren Mehr ist nicht nötig.

  5. Tatsächlich lässt sich erkennen, dass die Konfiguration von Quartz auf keinen Fall kompliziert erscheint, da Quartz tatsächlich ein Schwergewichtstool ist Etwas einfacheres? Werkzeuge, ja!
  6. Bitte sehen Sie sich unten meine Einführung zur Frühlingsaufgabe an. Spring-TaskIm vorherigen Abschnitt wurde die Verwendung von Quartz in Spring vorgestellt. In diesem Artikel wird das selbst entwickelte Tool für geplante Aufgaben nach Spring 3.0 vorgestellt, das Es ist wie ein leichter Quarz und erfordert keine zusätzlichen Pakete außer Spring-bezogenen Paketen. Diese beiden werden im Folgenden vorgestellt. Der erste: Konfigurationsdateimethode

    Der erste Schritt: Schreiben Sie die Jobklasse
  7. , die ein gewöhnliches Pojo ist, wie folgt: Java-Code

    1. import org.springframework.stereotype.Service;

    2. public
    3. class TaskJob { 

    4.  public

      void job1() {
    5. System.out .println("Aufgabe in Bearbeitung...");

      }  

    6. }  

    7. Schritt 2: Namespace und Beschreibung hinzufügen
    8. Xml-Code
    "http://www.springframework.org/schema/beans"

Verwendungsanweisungen für im Frühling geplante Aufgabenxmlns:task=
"http://www.springframework.org/schema/task"
  1. . . . . . . xsi:schemaLocation="http://www.springframework.org/schema/task "

    > >
  2. Schritt 3: Legen Sie bestimmte Aufgaben in der Spring-Konfigurationsdatei fest

  3. Xml-Code

  4. task:scheduled-tasks

 task:scheduled

ref=
"taskJob"
method=Verwendungsanweisungen für im Frühling geplante Aufgaben"job1"
cron=
"0 * * * * ?"
    /> 
  1. task:scheduled-tasks> >context:component-scan base-package=" com.gy.mytask " />

    Erläuterung: Der ref-Parameter gibt die Task-Klasse an, die Methode gibt die Methode an, die Es müssen Cron- und CronExpression-Ausdrücke ausgeführt werden. Die spezifische Schreibmethode wird hier nicht vorgestellt. Einzelheiten finden Sie im Anhang des vorherigen Artikels.
  2. Selbstverständlich wird diese Konfiguration für Spring-Scanning-Anmerkungen verwendet.

    Die Konfiguration ist hier abgeschlossen, ist das nicht sehr einfach? Zweitens: Verwenden Sie das Annotationsformular Vielleicht möchten wir es nicht jedes Mal in der XML-Datei konfigurieren, wenn wir eine Aufgabenklasse schreiben. Schauen wir uns das an in der Quelldatei. Definition der Anmerkung:

  3. Java-Code

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

    2. @Retention(RetentionPolicy.RUNTIME)

    3. @Documented

    4. public @interface Scheduled

    5. {

    6. public abstract String cron() ;

    7. public abstract long FixedDelay();

    8. public abstract long FixedRate(); 🎜>

      }
    9. Es ist ersichtlich, dass diese Annotation drei Methoden oder Parameter hat, was bedeutet:
cron: Geben Sie den Cron-Ausdruck an.

fixedDelay: Offizielle Dokumenterklärung: Ein intervallbasierter Trigger, bei dem das Intervall ab der Abschlusszeit der vorherigen Aufgabe gemessen wird. Der Zeiteinheitswert wird in Millisekunden gemessen . Es bedeutet das Intervall vom Abschluss der vorherigen Aufgabe bis zum Start der nächsten Aufgabe, die Einheit ist Millisekunden.

fixedRate: Offizielle Dokumenterklärung: Ein intervallbasierter Trigger, bei dem das Intervall ab der Startzeit der vorherigen Aufgabe gemessen wird. Das heißt, ab dem Start der vorherigen Aufgabe zur nächsten Aufgabe Das Startintervall in Millisekunden.

Lassen Sie mich es als nächstes konfigurieren.

Schritt 1: Pojo schreiben

Java-Code
Verwendungsanweisungen für im Frühling geplante Aufgaben
    import org.springframework.scheduling.annotation.Scheduled;
  1. @Component("taskJob")

  2. öffentliche

    Klasse TaskJob {

  3. @Scheduled(cron =
  4. "0 0 3 * * ?")
  5. public 
  6. void job1() { 
  7.  System.out.println("Task in progress. . ”);  

  8.                       Schritt 2: Aufgabenbezogene Konfiguration hinzufügen:

    Xml-Code
    1. xml version="1.0" encoding="UTF-8"?>  

    2. Beans xmlns= „http://www.springframework.org/schema/beans“  

    3.     xmlns:xsi=“ http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  

    4.     xmlns:context="http://www.springframework.org/schema/context"  

    5.     xmlns:tx="http://www.springframework.org/schema/tx"  

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

    7.     xsi:schemaLocation ="  

    8.          "  

    9.     default-lazy-init="falsch">  

    10.     context:annotation-config />  

    11.     >  

    12.     context:component-scan base-package="com.gy.mytask" /> ;  

    13. >  

    14.     task:annotation-driven scheduler="qbScheduler" mode="proxy" />  

    15.     task:scheduler id="qbScheduler" pool-size="10"/>  

Hinweis: Theoretisch müssen Sie nur den Konfigurationssatz hinzufügen. Diese Parameter sind nicht erforderlich.

Ok, die Konfiguration ist abgeschlossen. Natürlich gibt es noch viele Parameter. Weitere Informationen finden Sie im XSD-Dokument.

Anhang:

cronExpression-Konfigurationsanweisungen, für spezifische Verwendung und Parameter bitte Baidu google

Feld erlaubt 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 , - * /

- Intervall

* Platzhalter

? Sie möchten dieses Feld nicht festlegen

Das Folgende sind nur einige Beispiele

CRON-Ausdruck Formel Bedeutung

"0 0 12 * * ?" Wird jeden Tag um 12 Uhr mittags ausgelöst

"0 15 10 ? * *" Jeden Morgen um 10:15 Uhr

"0 15 10 * * ?" Wird jeden Morgen um 10:15 Uhr

"0 15 10" ausgelöst * * ? * " Ausgelöst jeden Morgen um 10:15

"0 15 10 * * ? * Ausgelöst jeden Morgen um 10:15 im Jahr 2005

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

"0 0/5 14 * * ?" ab 14 Uhr Auslösung alle 5 Minuten bis Ende 14:55 Uhr

"0 0/5 14,18 * * ?" Jeden Tag von 14 Uhr bis 14:55 Uhr und 18 Uhr bis 18 Uhr Wird alle 5 Minuten in zwei Zeiträumen von 55 Minuten ausgelöst

"0 0-5 14 * * ?" Wird jeden Tag einmal pro Minute von 14:00 bis 14:05 Uhr ausgelöst

"0 10,44 14 ? 3 MI" Wird jeden Mittwoch um 14:10 und 14:44 im März ausgelöst

"0 15 10 ? * MO-FR“ wird jeden Montag, Dienstag, Mittwoch, Donnerstag und Freitag um 10:15 Uhr ausgelöst

Das obige ist der detaillierte Inhalt vonVerwendungsanweisungen für im Frühling geplante Aufgaben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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