Heim  >  Artikel  >  Java  >  Zwei Implementierungsmethoden des Spring-Timers in JAVA

Zwei Implementierungsmethoden des Spring-Timers in JAVA

高洛峰
高洛峰Original
2016-12-16 13:16:581276Durchsuche

Derzeit gibt es zwei beliebte Spring-Timer-Konfigurationen: Javas Timer-Klasse und OpenSymphonys Quartz.

1. Java-Timer-Timing

Erben Sie zuerst die Klasse java.util.TimerTask, um die in Spring definierte Ausführungsmethode

import java.util.TimerTask; 
public class EmailReportTask extends TimerTask{ 
  @Override 
  public void run() { 
    ... 
  }  
}

zu implementieren 🎜>

...

Spring-Timer konfigurieren

<bean id="scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask"> 
<property name="timerTask" ref="reportTimerTask" /> 
<property name="period"> 
<value>86400000value> 
property> 
bean>

Das timerTask-Attribut teilt der ScheduledTimerTask mit, welche ausgeführt werden soll. 86400000 steht für 24 Stunden

Spring-Timer starten

Spring's TimerFactoryBean ist für das Starten geplanter Aufgaben verantwortlich

<bean class="org.springframework.scheduling.timer.TimerFactoryBean"> 
<property name="scheduledTimerTasks"> 
  <list><ref bean="scheduleReportTask"/>list> 
property> 
bean>

scheduledTimerTasks Displays eine Liste der Timer-Aufgaben, die gestartet werden müssen.

Sie können den Start verzögern, indem Sie das Verzögerungsattribut festlegen

<bean id="scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask"> 
<property name="timerTask" ref="reportTimerTask" /> 
<property name="period"> 
<value>86400000value> 
property> 
<property name="delay"> 
<value>3600000value> 
property> 
bean>

Wir können nur festlegen, dass diese Aufgabe alle 24 Stunden ausgeführt werden soll , was nicht genau ist. Starten Sie zu einem bestimmten Zeitpunkt

2. Quarz-Timer

Erben Sie zuerst die QuartzJobBean-Klasse, um die Methode „executeInternal“ zu implementieren

import org.quartz.JobExecutionContext; 
import org.quartz.JobExecutionException; 
import org.springframework.scheduling.quartz.QuartzJobBean; 
public class EmailReportJob extends QuartzJobBean{ 
protected void executeInternal(JobExecutionContext arg0) 
throws JobExecutionException { 
... 
} 
}

in Spring Definition in

<bean id="reportJob" class="org.springframework.scheduling.quartz.JobDetailBean"> 
<property name="jobClass"> 
<value>EmailReportJobvalue> 
property> 
<property name="jobDataAsMap"> 
  <map> 
    <entry key="courseService"> 
      <ref bean="courseService"/> 
      entry> 
  map> 
property> 
bean>

Hier deklarieren wir nicht direkt eine EmailReportJob Bean, sondern eine JobDetailBean. Dies ist ein Merkmal von Quarz. JobDetailBean ist eine Unterklasse von Quartzs org.quartz.JobDetail, die erfordert, dass ein Job-Objekt über das jobClass-Attribut festgelegt wird.

Eine weitere Besonderheit bei der Verwendung von Quartz's JobDetail ist, dass das courseService-Attribut von EmailReportJob indirekt gesetzt wird. Die jobDataAsMap-Eigenschaft von JobDetail akzeptiert eine Map, einschließlich verschiedener Attribute, die auf jobClass festgelegt sind. Wenn JobDetailBean instanziiert wird, fügt es das courseService-Bean in die courseService-Eigenschaft von EmailReportJob ein.

Timer starten

Die org.quartz.Trigger-Klasse von Quartz beschreibt, wann und wie oft ein Quartz-Job ausgeführt werden soll. Spring bietet zwei Trigger, SimpleTriggerBean und CronTriggerBean.


SimpleTriggerBean ähnelt ScheduledTimerTasks. Geben Sie die Ausführungshäufigkeit der Arbeit an und imitieren Sie die geplanteTimerTasks-Konfiguration

<bean id="simpleReportTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> 
<property name="jobDetail" ref="reprotJob" /> 
<property name="startDelay"> 
<value>360000value> 
property> 
<property name="repeatInterval"> 
  <value>86400000value> 
property> 
bean>
Laufzeit

Das cronExpression-Attribut gibt an, wann zu feuern. Das Geheimnisvollste ist der Cron-Ausdruck:

<bean id="cronReportTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
<property name="jobDetail" ref="reprotJob" /> 
<property name="cronExpression"> 
<value>0 0 6 * * ?value> 
property> 
bean>
Cron ist normalerweise für geplante Aufgaben in Linux-Systemen verantwortlich. Ein Cron-Ausdruck besteht aus mindestens 6 (möglicherweise 7) durch Leerzeichen getrennten Zeitelementen. Von links nach rechts:

1. Sekunden 2. Minuten 3. Stunden 4. Tag des Monats (1-31) 5. Monat (1-12 oder JAN-DEZ) 6. Tag der Woche ( 1-7 oder SUN-SAT) 7. Jahr (1970-2099)

Jedes Element zeigt einen Wert (z. B. 6), ein Intervall (9-12) und eine Liste (9, 11, 13) oder a an Platzhalterzeichen (*). Da sich die beiden Elemente 4 und 6 gegenseitig ausschließen, sollten Sie ein Fragezeichen (?) setzen, um das Feld anzugeben, das Sie nicht festlegen möchten, und „/“, wenn die Wertekombination die Anzahl der Wiederholungen angibt (10/6 bedeutet Wiederholung). 6 alle 10 Sekunden Zweitklassig).

Timer starten


Das Trigger-Attribut akzeptiert eine Reihe von Triggern.

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
  <property name="triggers"> 
    <list><ref bean="cronReportTrigger"/>list> 
  property> 
bean>
Okay, das ist das Ende dieses Artikels, aber es gibt einige Mängel. Sie können mir gerne Ihre wertvollen Meinungen mitteilen.

Weitere verwandte Artikel zu den beiden Implementierungsmethoden des Spring Timers in JAVA 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