Heim  >  Artikel  >  Java  >  Mehrere Methoden zur Implementierung der Zeitplanung im Frühjahr

Mehrere Methoden zur Implementierung der Zeitplanung im Frühjahr

高洛峰
高洛峰Original
2017-02-16 16:56:351068Durchsuche

In diesem Artikel werden hauptsächlich Beispiele für die Zeitplanung im Frühjahr vorgestellt. Das System kann zu bestimmten Zeiten, wenn niemand im Dienst ist, mehr erfahren.

1. Inhaltseinleitung

Die sogenannte geplante Planung bezieht sich auf einen Mechanismus, mit dem das System bestimmte spezifische Funktionen zu einem bestimmten Zeitpunkt ausführen kann, wenn niemand im Dienst ist In der Entwicklung werden geplante Planungsvorgänge in zwei Formen unterteilt:

Geplanter Auslöser: Führen Sie bestimmte Verarbeitungsvorgänge zu einem bestimmten Zeitpunkt aus.

Intervallauslöser: Wird alle paar Sekunden ausgeführt. Automatische Verarbeitung bestimmter Vorgänge .

Die gesamte Verarbeitung hängt vom zugrunde liegenden Taktgenerator des Computersystems ab. Im anfänglichen Implementierungsprozess von Java sind zwei Klassen speziell für die Zeitverarbeitung vorgesehen: Timer und TimerTask, von denen TimerTask hauptsächlich die Ausführung definiert Aufgaben entsprechen dem Starten eines Threads zur Ausführung bestimmter Aufgaben.

public class MyTask extends TimerTask{

  @Override

  public void run() {//定义要执行的任务

    // TODO Auto-generated method stub

    String currentTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());

    System.out.println(currentTime);

  } 

}

public class MyTaskTest {

  public static void main(String[] args) {

    Timer timer=new Timer();

    timer.schedule(new MyTask(), 1000);//启动任务,延迟1秒后执行。

  } 

}

Wenn Sie jedoch jedes Jahr zu einer bestimmten Zeit, Minute und Sekunde in einem bestimmten Monat eine Aufgabe ausführen müssen, gibt es für Sie nichts kann mit Timer und TimerTask durchgeführt werden. In der Projektentwicklung gibt es häufig zwei Optionen für die Zeitsteuerung:

Quarzkomponente: Unternehmens- und Zeitplanungskomponenten, die separat konfiguriert werden müssen

SpringTask: leichte Komponente, einfache Konfiguration, kann Verwenden Sie Annotation, um die Konfigurationsverarbeitung zu implementieren.

2. Quartz definiert die Zeitplanung

Um die Quartz-Komponente zu verwenden, müssen wir das Quartz-Entwicklungspaket importieren und das Quartz-Entwicklungspaket in pom.xml hinzufügen.

<dependency>

      <groupId>org.quartz-scheduler</groupId>

      <artifactId>quartz</artifactId>

      <version>2.2.3</version>

</dependency>

Nach der Einführung des Pakets können Sie eine geplante Terminplanung entwickeln.

Es gibt zwei Implementierungsmodi:

um die übergeordnete Klasse QuartzJobBean zu erben;

um die Konfiguration direkt zu verwenden, um die Methodenplanungssteuerung zu erreichen.

1. Erben Sie eine übergeordnete Klasse, um die Aufgabenverarbeitung zu implementieren.

public class MyTask2 extends QuartzJobBean{

  @Override

  protected void executeInternal(JobExecutionContext context) throws JobExecutionException {

    // TODO Auto-generated method stub

        String currentTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());

        System.out.println(currentTime);

        System.out.println("具体的任务实现!!!");

  }

}

Die gesamte Timing-Planung muss in der Spring-Steuerdatei aktiviert sein, d. h. es ist nicht erforderlich, eine explizite Klasse für die aktivierte Timing-Aufgabe zu schreiben .

2. Fügen Sie die Timing-Scheduling-Konfiguration in der Datei applicationContext.xml hinzu und implementieren Sie sie über die Timing-Scheduling-Factory-Klasse.

<bean id="taskFactory"

    class="org.springframework.scheduling.quartz.JobDetailFactoryBean">

    <property name="jobClass" value="cn.wnh.timerSask.MyTask1" />

    <property name="jobDataMap">

      <map>

        <entry key="timeout" value="0" />

      </map>

    </property>

  </bean>

Dann konfigurieren Sie den Trigger-Job der Aufgabe. Es gibt zwei Arten von Job-Konfigurationen:

Intervall-Triggerung verwenden: Wiederholen nach eine bestimmte Zeitspanne Ausführung;

Factory-Klasse: org.springframework.scheduling.quartz.SimpleTriggerFactoryBean

<bean id="simpleTrigger"

    class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">

    <!-- 定义间隔触发的执行程序类 -->

    <property name="jobDetail" ref="taskFactory"></property>

    <!-- 设置定时触发延迟时间 -->

    <property name="startDelay" value="0"></property>

    <!-- 单位是”毫秒“ -->

    <property name="repeatInterval" value="2000"></property>

  </bean>

Intervall-Trigger-Scheduler festlegen : org.springframework .scheduling.quartz.SchedulerFactoryBean

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

    <property name="triggers">

      <list>

        <ref bean="simpleTrigger" />

      </list>

    </property>

  </bean>

3. Zu diesem Zeitpunkt wird die gesamte Intervall-Trigger-Steuerung von Spring verwaltet Zum Starten des Spring-Containers können intervallgesteuerte Aufgaben implementiert werden.

Verwenden Sie Cron, um geplante Auslösung zu implementieren

Quartz kann nicht nur Intervall-Auslösung implementieren, sondern kann auch mit Cron kombiniert werden, um geplante Auslösung zu implementieren, was auch seine wichtigste Funktion ist.

Die in allgemeinen Projekten am häufigsten verwendeten Modi: Auslösen zur vollen Stunde, Auslösen zu Beginn des Monats und Auslösen zu Beginn des Jahres.

Ändern Sie die vorherige Intervall-Trigger-Konfiguration und verwenden Sie CronTriggerFactoryBean, um geplante Trigger zu implementieren.

<bean id="taskFactory"

    class="org.springframework.scheduling.quartz.JobDetailFactoryBean">

    <property name="jobClass" value="cn.wnh.timerSask.MyTask1" />

    <property name="jobDataMap">

      <map>

        <entry key="timeout" value="0" />

      </map>

    </property>

  </bean>

  

    

    

    

  

  

    

      

        

      

    

  

Starten Sie einfach den Spring-Container.

2. Vererben Sie keine Klasse, um die Zeitplanung zu implementieren.

In der Projektentwicklung führt die Vererbung direkt zu einer eingeschränkten Kontrolle der Einzelvererbung. In diesem Fall stellt Spring eine Methode bereit, die dies ermöglicht nicht erforderlich Durch die Vererbung kann eine beliebige Klasse die Aufgabenverarbeitung für geplante Vorgänge implementieren.

Definieren Sie eine Aufgabenausführungsklasse und erben Sie keine Klasse.

public class MyTask2 {

  public void taskSelf(){

    String task=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new java.util.Date());

    System.out.println(task);

    System.out.println("执行具体任务操作");

  }

}

Konfigurieren Sie die Factory-Klasse in applicationContext.xml: org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean

<bean id="taskFactory2"

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

    <property name="targetObject">

      <bean class="cn.wnh.timerSask.MyTask2" />

    </property>

    <!--配置要执行的方法 -->

    <property name="targetMethod" value="taskSelf" />

  </bean>

Konfigurieren Sie dann eine neue Programmklasse in der Aufgabenplanungskonfiguration

<bean id="cronTrigger"

    class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

    <property name="jobDetail" ref="taskFactory2" />

    <!-- cron表达式,描述每分钟触发一次 -->

    <property name="cronExpression" value="* * * * * ?" />

  </bean>

Starten Sie den Container, um eine geplante Planung zu erreichen.

In diesem Modus gibt es keine Klassenvererbungsabhängigkeiten und die Verarbeitung ist flexibler.

Spring Task implementiert die geplante Planung

Spring verfügt über eine eigene Unterstützung für die geplante Planung, die sich noch einfacher zu verwenden anfühlt als Quartz.

Es gibt zwei Implementierungsmethoden: 1. Konfigurieren Sie die Implementierung in applicationContext.xml. 2. Verwenden Sie Annotation, um sie zu implementieren.

Aber welchen Modus Sie verwenden möchten, Sie müssen zunächst über eine Aufgabenverarbeitungsklasse verfügen.

Aufgabenverarbeitungsklasse definieren.

Die vorherige MyTask2-Klasse wird hier ohne Umschreiben direkt verwendet.

Ändern Sie die Datei applicationContext.xml:

Es muss die Namespace-Definition für die Aufgabenverarbeitung hinzugefügt werden:

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

http://www.php.cn/

http://www.php.cn/ >

1 Konfiguration Konfiguration von Aufgabenvorgängen zur Erzielung einer Intervallauslösung.

<bean id="myTask" class="cn.wnh.timerSask.MyTask2" />

  <task:scheduled-tasks>

    <task:scheduled ref="myTask" method="taskSelf"

      fixed-rate="2000" />

  </task:scheduled-tasks>

Verwenden Sie cron, um geplante Auslösung zu implementieren

<bean id="myTask" class="cn.wnh.timerSask.MyTask2" />

  <task:scheduled-tasks>

    <task:scheduled ref="myTask" method="taskSelf" cron="* * * * * ?" />

  </task:scheduled-tasks>

Sichtbar, SpringTask Einfacher zu implementieren.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er zum Lernen aller beiträgt. Ich hoffe auch, dass jeder die PHP-Chinesisch-Website unterstützt.

Weitere verwandte Artikel zu verschiedenen Methoden zur Implementierung der Zeitplanung im Frühjahr 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