Maison > Java > javaDidacticiel > Plusieurs méthodes pour implémenter la planification temporelle au printemps

Plusieurs méthodes pour implémenter la planification temporelle au printemps

高洛峰
Libérer: 2017-02-16 16:56:35
original
1122 Les gens l'ont consulté

Cet article présente principalement des exemples de planification de timing au printemps. Le système peut exécuter certaines fonctions à un certain moment lorsque personne n'est de service. Ceux qui sont intéressés peuvent en savoir plus.

1. Introduction au contenu

La planification dite planifiée fait référence à un mécanisme par lequel le système peut exécuter certaines fonctions à un certain moment lorsque personne n'est de service. développement, les opérations de planification planifiées sont divisées en deux formes :

déclencheur planifié : effectuer certaines opérations de traitement à un moment donné ;

déclencheur d'intervalle : effectué toutes les quelques secondes Traitement automatique de certaines opérations.

Tous les traitements reposent sur le générateur d'horloge sous-jacent du système informatique. Dans le processus d'implémentation initial de Java, il existe deux classes spécifiquement fournies pour le traitement du timing : Timer et TimerTask, dont TimerTask définit principalement l'exécution de tâches équivaut à démarrer un thread pour effectuer certaines tâches.

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秒后执行。

  } 

}
Copier après la connexion

Cependant, si vous devez effectuer une tâche à une certaine heure, minute et seconde au cours d'un certain mois chaque année, il n'y a rien que vous peut le faire en utilisant Timer et TimerTask. Dans le développement de projets, il existe souvent deux options pour le contrôle du timing :

composant quartz : composants d'entreprise et de planification du timing, qui doivent être configurés séparément

SpringTask : composant léger, configuration simple, peut être configuré. Utilisez Annotation pour implémenter le traitement de la configuration.

2. Quartz définit la planification du timing

Pour utiliser le composant Quartz, nous devons importer le package de développement quartz et ajouter le package de développement quartz dans pom.xml.

<dependency>

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

      <artifactId>quartz</artifactId>

      <version>2.2.3</version>

</dependency>
Copier après la connexion

Après avoir présenté le package, vous pouvez développer une planification planifiée.

Il existe deux modes d'implémentation :

pour hériter de la classe parent QuartzJobBean ;

pour utiliser directement la configuration pour obtenir le contrôle de planification des méthodes.

1. Héritez d'une classe parent pour implémenter le traitement des tâches.

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("具体的任务实现!!!");

  }

}
Copier après la connexion

Toute planification de synchronisation doit être activée dans le fichier de contrôle Spring, c'est-à-dire qu'il n'est pas nécessaire d'écrire une classe explicite pour la synchronisation. Tâche activée .

2. Ajoutez la configuration de planification de synchronisation dans le fichier applicationContext.xml et implémentez-la via la classe d'usine de planification de synchronisation.

<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>
Copier après la connexion

Configurez ensuite le travail de déclenchement de la tâche. Il existe deux types de configurations de travail :

Utiliser le déclenchement par intervalle : répéter après. une certaine période de temps Exécution ;

Classe Factory : 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>
Copier après la connexion

Définir le planificateur de déclenchement d'intervalle : org.springframework .scheduling.quartz.SchedulerFactoryBean

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

    <property name="triggers">

      <list>

        <ref bean="simpleTrigger" />

      </list>

    </property>

  </bean>
Copier après la connexion

3. À l'heure actuelle, tous les contrôles de déclenchement d'intervalle sont gérés par Spring. pour démarrer le conteneur Spring, des tâches de déclenchement d'intervalle peuvent être implémentées.

Utilisez Cron pour implémenter le déclenchement planifié

Quartz peut non seulement implémenter le déclenchement par intervalles, il peut également être combiné avec Cron pour implémenter le déclenchement planifié, qui est également sa fonction la plus importante.

Les modes les plus couramment utilisés dans les projets généraux : déclenchement à l'heure, déclenchement en début de mois et déclenchement en début d'année.

Modifiez la configuration précédente du déclencheur d'intervalle et utilisez CronTriggerFactoryBean pour implémenter le déclenchement programmé.

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

  

    

    

    

  

  

    

      

        

      

    

  
Copier après la connexion

Démarrez simplement le conteneur Spring.

2. N'héritez d'aucune classe pour implémenter la planification temporelle

Dans le développement de projets, l'héritage conduira directement au contrôle limité de l'héritage unique, donc dans ce cas, Spring fournit une méthode qui le fait pas besoin d'hériter d'une classe qui peut implémenter le traitement des tâches pour les opérations planifiées.

Définissez une classe d'exécution de tâches qui n'hérite d'aucune classe.

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("执行具体任务操作");

  }

}
Copier après la connexion

Configurez la classe d'usine dans 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>
Copier après la connexion

Configurez ensuite une nouvelle classe de programme dans la configuration de la planification des tâches

<bean id="cronTrigger"

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

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

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

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

  </bean>
Copier après la connexion

Démarrez le conteneur pour réaliser la planification planifiée.

Ce mode n'a pas de dépendances d'héritage de classe et le traitement sera plus flexible.

Spring Task implémente la planification planifiée

Spring dispose de son propre support pour la planification planifiée, qui semble encore plus facile à utiliser que Quartz.

Il a deux méthodes d'implémentation, 1. Configurez l'implémentation dans applicationContext.xml 2. Utilisez Annotation pour l'implémenter.

Mais quel mode utiliser, vous devez d'abord avoir une classe de traitement de tâches.

Définir la classe de traitement des tâches.

La classe MyTask2 précédente est utilisée directement ici sans réécriture.

Modifier le fichier applicationContext.xml :

Besoin d'ajouter la définition de l'espace de noms pour le traitement des tâches :

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

http://www.php.cn/

http://www.php.cn/ >
Copier après la connexion

1 configuration Configuration des opérations de tâches pour mettre en œuvre le déclenchement par intervalles.

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

  <task:scheduled-tasks>

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

      fixed-rate="2000" />

  </task:scheduled-tasks>
Copier après la connexion

Utilisez cron pour implémenter le déclenchement programmé

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

  <task:scheduled-tasks>

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

  </task:scheduled-tasks>
Copier après la connexion

Visible, SpringTask Plus facile à mettre en œuvre.

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de chacun. J'espère également que tout le monde soutiendra le site Web PHP chinois.

Pour plus d'articles sur plusieurs méthodes d'implémentation de la planification temporelle au printemps, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal