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秒后执行。 } }
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>
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("具体的任务实现!!!"); } }
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>
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>
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>
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>
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("执行具体任务操作"); } }
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>
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>
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/ >
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>
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>
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 !