Ajoutant des tâches de synchronisation aux programmes Web Java, voici deux façons: 1. Utilisez l'injection de l'auditeur; 2. Utilisez l'injection de printemps @scheduled injection.
Le deuxième formulaire est recommandé.
1. Utilisez l'injection de l'auditeur
①: Créer une classe d'écoute:
Importer javax.servlet.servletContexTevent; Importer Javax.servlet.servletContextListener; public class timerDatAskListener implémente ServletContextListener {@Override public void contextinitialized (ServletContexTevent ServletContevent) {new TiMMerManager (); } @Override public void contextDestRoyed (ServletContextevent ServletContexTevent) {}}②: Créez une classe de tâches chronométrée:
import java.util.calendar; import java.util.date; import java.util.timer; classe publique TimerManager {// intervalle de temps: 24h privé statique final de longue période_day = 24 * 60 * 60 * 1000; public TimerManager () {Calendar Calendar = Calendar.getInstance (); // Personnalisez l'exécution de Calendar.Set (calendar.hour_of_day, 12); calendar.set (calendar.minute, 30); calendar.set (calendar.second, 30); Date de date = calendar.getTime (); // heure de la première fois pour exécuter la tâche de temps // Si le point de temps de l'heure s'est écoulé, l'exécution commencera le deuxième jour if (date.beFore (new Date ())) {Date = this.addday (date, 1); } TIMER TIMER = NOUVEAU TIMER (); TimertAskService Task = new TimertAskService (); // Planifiez la tâche spécifiée pour démarrer l'exécution de retard fixe répété à l'heure spécifiée. timer.schedule (tâche, date, période_day); } // augmenter ou diminuer le nombre de jours de date privée supplémentaire (date de date, int num) {calendar startdt = calendar.getInstance (); startdt.setTime (date); startdt.add (calendar.day_of_month, num); return startdt.gettime (); }}③: Créer une classe TIMERTASK:
Importer java.util.Timertask; public class TimertAskService étend Timertask {@Override public void run () {try {// La logique de tâche à exécuter est écrite ici System.out.println ("Insérer le mot de passe avec succès!"); } catch (exception e) {System.out.println ("Insérer un mot de passe échoué!"); }}}④: Enregistrez l'auditeur dans web.xml
<! - TIMERDATATASKListener Écouteur -> <ouciner> <écouteur-classe> com.jsiqi.resume.service.timerDatataskListener </ auteur-classe> </ écouteur>
2. Inject en utilisant l'annotation de printemps
Le cadre de mon projet est Spring + Springmvc + Mybatis
Exemple de code:
import org.springframework.scheduling.annotation.scheduled; import org.springframework.sterreotype. System.out.println ("Insérer le mot de passe avec succès!"); } catch (exception e) {System.out.println ("Insérer un mot de passe échoué!"); }}}Le paramètre de temps de synchronisation est le suivant:
Configuration de la configuration Crontrigger est: [secondes] [minutes] [heures] [jours] [mois] [Weeks] [ans] Exemple: 0 0 10,14,16 * *? 10 h tous les jours, 14 h, 4: 0 0/30 9-17 * *? 0 demi-heure pendant neuf heures de travail 0 0 12? * Mer indique que tous les mercredis à 12 heures "0 0 12 * *?" 0 15 10 * *? "10 h 15 déclenché tous les jours" 0 15 10 * *? 2005 "2005 Daily Trigger" 0 * 14 * *? "Trigger" 0 0/5 14 * *? "Trigger" 0 0/5 14 * *? "Trigger" 0 0/5 14,18 * *? "Trigger" 0 0/5 14,18 * *? "Trigger" 0 0-5 14 * *? "Trigger" 0 0-5 14 * *? "Trigger" 0 10,44 14? 3 mer "Trigger" 0 10h et 14h44 le mercredi de mars de chaque année 10h15 du lundi au vendredi Trigger "0 15 10 15 *?" 10h15 le 15 du mois "0 15 10 l *?" 10:15 am on the last day of the month "0 15 10 ? * 6L" 10:15 am on the last Friday of the month "0 15 10 ? * 6L" 10:15 am on the last Friday of the month "0 15 10 ? * 6L 2002-2005" 10:15 am on the last Friday of the month "0 15 10 ? * 6#3" 10:15 am on the third Friday of the month
| Numéro de série | illustrer | Est-ce nécessaire | Valeurs autorisées | Wildcards autorisés |
|---|---|---|---|---|
| 1 | Deuxième | Oui | 0-59 | , - * / |
| 2 | indiquer | Oui | 0-59 | , - * / |
| 3 | heure | Oui | 0-23 | , - * / |
| 4 | jour | Oui | 1-31 | , - *? / Lw |
| 5 | lune | Oui | 1-12 ou Jan-Dec | , - * / |
| 6 | semaine | Oui | 1-7 ou Sun-Sat | , - *? / Lw |
| 7 | Année | Non | vide ou 1970-2099 | , - * / |
DESCRIPTION WILD CARD:
* signifie toutes les valeurs. Par exemple: définissez "*" sur le champ partiel, ce qui signifie que chaque minute sera déclenchée.
? signifie aucune valeur n'est spécifiée. Le scénario utilisé est que vous n'avez pas besoin de vous soucier de la valeur de ce champ actuellement défini.
Par exemple: une opération doit être déclenchée le 10 de chaque mois, mais cela ne se soucie pas de la journée hebdomadaire, donc le champ qui doit être réglé sur "?" est défini sur 0 0 0 10 *?
- indique l'intervalle. Par exemple, la définition de "10-12" à l'heure signifie que 10, 11 et 12 points seront déclenchés.
, signifie spécifier plusieurs valeurs, par exemple, définir "lun, mer, ven" sur le terrain hebdomadaire signifie déclencher le lundi, mercredi et vendredi
/ pour le déclenchement incrémentiel. Si vous définissez "5/15" sur la seconde, cela signifie qu'à partir de 5 secondes, déclenchant toutes les 15 secondes (5,20,35,50). Réglez «1/3» sur le champ du mois pour commencer le 1er du mois et déclencher tous les trois jours.
L signifie le sens final. Sur le paramètre de jour, il indique le dernier jour du mois (sur la base du mois en cours, s'il est février, il sera également basé sur le fait qu'il est runnien [Leap]). Sur le terrain de la semaine, cela indique samedi, ce qui équivaut à "7" ou "SAT". Si un nombre est précédé de "L", cela signifie le dernier des données. Par exemple, définir un format comme "6L" dans le champ hebdomadaire signifie "le dernier vendredi du mois"
W indique la journée de travail la plus proche de la date spécifiée (du lundi au vendredi). Par exemple, définissez "15W" dans le champ de jour pour indiquer la journée de travail la plus proche du 15 de chaque mois. Si le 15 se trouve samedi, recherchez le plus récent déclencheur du vendredi (14e). Si le 15 n'est pas chaque semaine, recherchez le dernier déclencheur du lundi (16e). Si le 15 se trouve en semaine (du lundi au vendredi), il se déclenchera ce jour-là. Si le format est spécifié comme "1W", il indique le jour de travail le plus récent après le 1er de chaque mois. Si le 1er est samedi, il se déclenchera le 3 lundi prochain. (Remarque, seuls les nombres spécifiques peuvent être définis avant "W", et les intervalles "-" ne sont pas autorisés).
# Numéro de série (représente la semaine de chaque mois), par exemple, la définition de "6 # 3" dans le champ de la semaine indique le troisième samedi de chaque mois. Notez que si "# 5" est spécifié, il se trouve qu'il n'y a pas de samedi dans la cinquième semaine, la configuration ne sera pas déclenchée (elle convient le plus à la fête des mères et à la fête des pères);
Conseils:
«L» et «w» peuvent être utilisés en combinaison. Si "LW" est réglé sur le terrain du jour, cela signifie qu'il est déclenché le dernier jour ouvrable du mois;
Le réglage du champ de la semaine est insensible à la casse si les lettres anglaises sont utilisées, c'est-à-dire que le lun est le même que le lundi;
se référer à:
https://www.cnblogs.com/liaojie970/p/5913272.html
http://prisonbreak.iteye.com/blog/2247216