Récemment, il est nécessaire de mettre en œuvre des tâches d'exécution planifiées dans des projets, tels que le calcul chronométré des points des membres, l'appel des interfaces tierces, etc. Étant donné que le projet utilise le framework Spring, il est introduit ici en collaboration avec le cadre de printemps.
Écrire ses devoirs
Autrement dit, Pojo ordinaire, comme suit:
package com.pcmall.task; import org.slf4j.logger; import org.slf4j.loggerfactory; public class taska {private static logger logger = loggerfactory.getLogger (taska.class); public void taska1 () {for (in intr (taska.class); public void taska1 () {for (in intr (taska.class); public void taska1 () {pour (int (int i = 0; i <100; i ++) {System.out.println ("---- a1 ----" + i);}} public void taska2 () {for (int i = 0; i <100; i ++) {System.out.println ("----- a2 ----" + i);}}}} Définir des tâches spécifiques dans le fichier de configuration Spring
<? xml version = "1.0" Encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id = "taska"> </ank> <bean id = "taskb"> </ bean> <ean> <bean id = "taskjoba1"> <propriété name = "TargetObject" Ref = "taska"> </ Property> Value = "taska1"> </ propriété> <propriété name = "concurrent" value = "false"> </ propriété> </ bean> <bean id = "taskJoba2"> <propriété name = "cibleObject" ref = "taska"> </ propriété> <propriété name = "TargetMethod" value = "taska2"> </prepperfame name = "Concurrent" value = "false"> </ property> </prea id = "taskJobb1"> <propriété name = "targetObject" ref = "taskb"> </ propriété> <propriété name = "cibleMethod" value = "taskb1"> </ propriété> <propriété name = "current" value = "false"> </ propriété> </ bean Value = "TaskB2"> </ Property> <propriété name = "concurrent" value = "false"> </ propriété> </ bean> <bean id = "taska1trigger"> <propriété name = "jobdetail"> <refEb = "taskJoba1" /> </ propriété> <propriété name = "CRONEXPRESS"> <valeur> 0 0/1 * *? id = "taska2trigger"> <propriété name = "jobdetail"> <ref bean = "taskjoba2" /> </ propriété> <propriété name = "cronexpression"> <value> 0 0/2 * * *? </value> </ propriété> </ bean> <bean id = "taskb1trigger"> <propriété name = "jobdetail"> <ref bean = "taskjobb1"> </ Property name = "Cronexpression"> <value> 0 0/1 * * *? </value> </ propriété> </ bean> <bean id = "taskb2trigger"> <propriété name = "jobdetail"> <refEb = "taskjobb2" /> </ propriété> <propriété name = "cronexpression"> <value> 0/2 * *? </value> class = "org.springframework.scheduling.quartz.schedulerfactoryBean"> <propriété name = "Triggers"> <sist> <fEf bean = "taska1trigger" /> <ref bean = "taska2trigger" /> <reflef bean = "taskb1trigger" /> <fEp Bean = "taskb2trigger" /> </ list> </ </ bean>> </ list> </ bean >>
Avis
Un déclencheur ne peut déclencher qu'un seul travail, mais un travail peut être déclenché par plusieurs déclencheurs, ce qui causera cette fois des problèmes de concurrence. Dans Quartz, si vous ne souhaitez pas exécuter le même travail simultanément, vous pouvez implémenter un dot stateful au lieu d'un travail. Si vous utilisez MethodInvokingJobDetailFactoryBean à Spring, vous pouvez le faire en définissant la propriété concurrent = "false".
Note finale
Les avantages de l'utilisation de Quartz au printemps au lieu d'une seule application comprennent:
Mettre tous les paramètres de planification des tâches au même endroit rend les tâches faciles à entretenir.
L'encodage du travail est uniquement possible, le déclencheur et le planificateur peuvent être définis par configuration
Vous pouvez utiliser Pojo Java Bean pour exécuter des travaux sans implémenter l'interface de travail
Utilisation détaillée des expressions cron
Caractères spéciaux autorisés par les valeurs autorisées sur le terrain
0-59 secondes, - * /
0-59, - * /
Heures 0-23, - * /
Date 1-31, - *? / LWC
Mois 1-12 ou Jan-Dec, - * /
Semaine 1-7 ou Sun-Sat, - *? / LC #
Année (facultative) Laisser vide, 1970-2099, - * /
exemple:
0/5 * * * *? : Exécuter toutes les 5 secondes
Le caractère "" est utilisé pour spécifier toutes les valeurs. Par exemple: "" signifie "par minute" dans le domaine des minutes.
Le "?" Le caractère n'est utilisé que dans les champs de date et de jour de semaine. Il est utilisé pour spécifier des "valeurs non explicatives". Il est utile lorsque vous devez spécifier quelque chose par l'un de ces deux domaines. Vous comprendrez en regardant l'exemple ci-dessous.
Les deux éléments de la date du mois et la date de la semaine s'excluent mutuellement. Définissez un point d'interrogation pour indiquer que vous ne voulez pas définir ce champ.
Le caractère "-" est utilisé pour spécifier une plage. Par exemple: "10-12" signifie "10, 11, 12".
Le caractère "," est utilisé pour spécifier une valeur supplémentaire. Par exemple: "lun, mer, ven" signifie "lun, mercredi, vendredi" dans le champ de la semaine.
Le caractère "/" est utilisé pour spécifier l'incrément. Par exemple: "0/15" dans le deuxième champ signifie 0, 15, 30 et 45 secondes par minute. "5/15" représente 5, 20, 35 et 50 par heure dans le champ minute. Le symbole "" est avant "/" (tel que: / 10) équivaut à 0 avant "/" (tel que: 0/10). N'oubliez pas une essence: chaque champ numérique d'une expression est un ensemble de valeurs maximales et minimales, telles que: l'ensemble des secondes et des champs minute est de 0 à 59, les champs de date sont 1-31 et les champs du mois sont 1-12. Le caractère "/" peut vous aider à obtenir la valeur numérique correspondante dans chaque champ de caractères. Par exemple: "7/6" ne sera déclenché qu'en juillet lorsque le domaine du mois, et ne signifie pas en juin.
L est un mot omis pour «dernier» qui peut représenter les champs du jour du jour et du jour de la semaine, mais la signification est différente dans les deux champs, par exemple, le champ du jour du mois représente le dernier jour d'un mois. Si le terrain du jour de semaine signifie «7» ou «SAT», si le nombre est précédé du terrain du jour de semaine, cela signifie les derniers jours d'un mois, comme «6L» signifie le dernier vendredi d'un mois.
Le personnage "W" permet uniquement au champ Date d'apparaître. Ce personnage est utilisé pour le jour de travail le plus récent de la date spécifiée. Par exemple: si vous écrivez "15W" dans le champ Date, cela signifie: le jour ouvrable le plus récent de ce mois le 15 de ce mois. Donc, si le 15 est samedi, la mission sera déclenchée le 14. Si 15 est meilleur dimanche, la tâche sera déclenchée lundi, c'est-à-dire le 16. Si vous remplissez "1W" dans le champ Date, même si le 1er est samedi, la tâche ne sera déclenchée que lundi prochain, c'est-à-dire la 3e. La journée de travail la plus récente spécifiée par le personnage "W" ne peut pas être traversée au mois. Le caractère "W" ne peut être utilisé qu'avec une valeur distincte, et ne peut pas être un champ numérique, tel que: 1-15W est mauvais.
"L" et "W" peuvent être utilisés de manière conjointe dans le champ Date, et LW représente le jour de travail de la dernière semaine du mois.
Le personnage "#" n'est autorisé qu'à apparaître dans le domaine du jour de la semaine. Ce caractère est utilisé pour spécifier un certain jour du mois. Par exemple: "6 # 3" signifie vendredi de la troisième semaine du mois (6 signifie vendredi, 3 signifie semaine 3). "2 # 1" signifie lundi de la première semaine du mois. "4 # 5" signifie mercredi de la cinquième semaine.
Le personnage "C" est autorisé à apparaître dans les champs de date et de jour de la semaine. Ce personnage s'appuie sur un "calendrier" spécifié. C'est-à-dire que la valeur de cette expression dépend du résultat du calcul du "calendrier" pertinent. S'il n'y a pas d'association "calendrier", elle équivaut à tous les "calendriers" inclus. Par exemple: le champ Date est "5C" pour indiquer le premier jour du "calendrier" associé, ou les 5 derniers jours du premier jour du mois. Le jour de la semaine est "1C", ce qui signifie le premier jour du "calendrier" associé, ou le lendemain du premier jour de la semaine, c'est-à-dire le lendemain du dimanche (lundi).
Exemple d'expression
"0 0 12 * *?" Déclenché à midi tous les jours "0 15 10? * *" Déclenché à 10 h 15 tous les jours "0 15 10 * *?" Déclenché à 10h15 tous les jours "0 15 10 * *? *" Déclenché à 10h15 tous les jours "0 0/5 14 * *? 2005" déclenché à 10h15 tous les jours "0 * 14 * *?" Déclenché à 10 h 15 tous les jours "0 0/5 14 * *?" Déclenché de 14 h 15 à 14 h 59 tous les jours "0 0/5 14 * *?" Déclenché de 14h15 à 14h55 tous les jours "0 0/5 14,18 * *?" Déclenché à 5 minutes tous les jours de 14h15 à 14h55 tous les jours "0 0/5 14,18 * *?" 0 0-5 14 * *? "0 10 44 14? 3 mer" 0 10 10 10 mercredis de mars chaque année à 14h10 et 14h44 chaque année à 14h10 et 14h44 chaque année à 14h10 et 14h44 chaque année à 14h10 et 14h44 chaque année à 15 10? * Lun-fri "0 15 10 15 *?" 0 15 10 15 *? "0 15 10 15 10 15 *?" 0 15 15 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 10 ? * 6l 2002-2005 "déclenché à 10 h 15 le dernier vendredi de chaque mois de 2002 à 2005" 0 15 10? * 6 # 3 "déclenché à 10h15 le troisième vendredi de chaque mois
Le printemps ci-dessus intègre le quartz pour implémenter la planification des tâches de synchronisation est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.