Hinzufügen von Zeitaufgaben zu Java -Webprogrammen finden Sie zwei Möglichkeiten: 1. Listener -Injektion; 2. Verwenden Sie Spring Annotation @Scheduled Injection.
Das zweite Formular wird empfohlen.
1. Verwenden Sie die Hörinjektion
①: Erstellen Sie eine Hörerklasse:
importieren javax.servlet.servletContexevent; importieren javax.servlet.servletContextListener; public class TimerDataDaskListener implementiert servletContextListener {@Override public void contextInitialized (servletContexTextextevent) {new Timermanager (); } @Override public void contextDestroyed (servletContexevent servletContexevent) {}}②: Erstellen Sie eine zeitgesteuerte Aufgabenklasse:
Import Java.util.Calendar; Import Java.util.date; Import Java.util.timer; TimerManager der öffentlichen Klasse {// Zeitintervall: 24H private statische endgültige long Period_Day = 24 * 60 * 60 * 1000; public TimerManager () {Calendar calendar = calendar.getInstance (); // Die Ausführung von Calendar.set (Calendar.hour_of_day, 12) anpassen; Calendar.set (Calendar.minute, 30); Calendar.set (Calendar.second, 30); Datum Datum = calendar.getTime (); // Zeit des ersten Males, um die Zeitaufgabe auszuführen // Wenn der Zeitpunkt der Zeit vergangen ist, beginnt die Ausführung am zweiten Tag, wenn (Datum (vor (neuer Datum ())) {Date = this.addday (Datum, 1); } Timer Timer = new Timer (); TimerTaskService Task = new timerTasKService (); // Planen Sie die angegebene Aufgabe, um die wiederholte Ausführung der festen Verzögerung zum angegebenen Zeitpunkt zu starten. Timer.Schedule (Aufgabe, Datum, period_day); } // Erhöhen Sie die Anzahl der Tage des privaten Datums (Datum Datum, int num) {Calendar startdt = calendar.getInstance (); startdt.settime (Datum); startdt.add (Calendar.day_of_month, num); return startdt.getTime (); }}③: TimerTask -Klasse erstellen:
Java.util.TimerTask; public class timertasService erweitert Timertask {@Override public void run () {try {// Die zu ausgeführte Aufgabenlogik wird hier geschrieben. } catch (Ausnahme e) {System.out.println ("Passwort fehlgeschlagen!"); }}}④: Registrieren Sie den Hörer in web.xml
<!-TimerDatataskListener-Listener-> <Hörer> <Hörer-Klasse> com.jsiqi.resume.service.timerDatataskListener </Listener-Klasse> </Listener>
2. Injizieren Sie mit Frühlingsanmerkungen
Das Framework für mein Projekt ist Spring + SpringMVC + MyBatis
Codebeispiel:
import org.springframework.Scheduling.annotation Passwort erfolgreich! "); } catch (Ausnahme e) {System.out.println ("Passwort fehlgeschlagen!"); }}}Die Zeiteinstellung für die Zeit ist wie folgt:
Crontrigger -Konfiguration Vollständiges Format lautet: [Sekunden] [Minuten] [Stunden] [Tage] [Monate] [Wochen] [Jahre] Beispiel: 0 0 10,14,16 * *? 10 Uhr jeden Tag, 14 Uhr, 4: 0 0/30 9-17 * *? 0 halbe Stunde während neun bis fünf Arbeitszeiten 0 0 12? * Mi weist darauf hin, dass jeden Mittwoch um 12 Uhr "0 0 12 * *?" 0 15 10 * *? "10.15 Uhr jeden Tag ausgelöst" 0 15 10 * *? 2005 "2005 Daily Trigger" 0 * 14 * *? 3 Wed "Trigger" 0 10 und 14:44 Uhr mittwochs im März jedes Jahr 10:15 Uhr von Montag bis Freitag Trigger "0 15 10 15 *?" 10:15 Uhr am 15. des Monats "0 15 10 l *?" 10:15 Uhr Am letzten Tag des Monats "0 15 10? * 6l" 10:15 am letzten Freitag des Monats "0 15 10? * 6l" 10:15 Uhr am letzten Freitag des Monats "0 15 10?
| Seriennummer | veranschaulichen | Ist es erforderlich | Zulässige Werte | Platzhalter erlaubte |
|---|---|---|---|---|
| 1 | Zweite | Ja | 0-59 | , - * / |
| 2 | Punkt | Ja | 0-59 | , - * / |
| 3 | Stunde | Ja | 0-23 | , - * / |
| 4 | Tag | Ja | 1-31 | , - *? / Lw |
| 5 | Mond | Ja | 1-12 oder Jan.-Dec | , - * / |
| 6 | Woche | Ja | 1-7 oder sonnen-sa | , - *? / Lw |
| 7 | Jahr | NEIN | leer oder 1970-2099 | , - * / |
Wildcard -Beschreibung:
* bedeutet alle Werte. Zum Beispiel: Setzen Sie "*" auf dem Teilfeld, was bedeutet, dass jede Minute ausgelöst wird.
? bedeutet, dass kein Wert angegeben wird. Das verwendete Szenario ist, dass Sie sich nicht um den Wert dieses aktuell festgelegten Werts kümmern müssen.
Zum Beispiel: Eine Operation ist am 10. eines jeden Monats ausgelöst, aber es kümmert sich nicht um den wöchentlichen Tag, also muss das Feld, das auf "?" ist auf 0 0 0 10 *eingestellt?
- Zeigt ein Intervall an. Wenn Sie beispielsweise "10-12" in der Stunde festlegen, werden 10, 11 und 12 Punkte ausgelöst.
, bedeutet, mehrere Werte anzugeben, z. B. das Einstellen von "Mon, Mi, Fr." auf dem wöchentlichen Feld bedeutet, am Montag, Mittwoch und Freitag auszulösen
/ Für inkrementelle Auslösen. Wenn Sie "5/15" auf die zweite festlegen, bedeutet dies, dass ab 5 Sekunden alle 15 Sekunden (5,20,35,50) ausgelöst wird. Setzen Sie '1/3' auf dem Monatsfeld, um am 1. des Monats zu beginnen und alle drei Tage auszulösen.
L bedeutet die endgültige Bedeutung. Am Tag der Tageszeitpunkte zeigt es den letzten Tag des Monats an (basierend auf dem aktuellen Monat, wenn es Februar ist, basiert auch darauf, ob es sich um Runnian [LEAP] handelt). Auf dem Feld Week zeigt es den Samstag an, der "7" oder "SAT" entspricht. Wenn "L" eine Zahl vorausgeht, bedeutet dies die letzte der Daten. Wenn Sie beispielsweise ein Format wie "6L" im wöchentlichen Bereich festlegen, bedeutet dies "den letzten Freitag des Monats".
W gibt den nächsten Arbeitstag zum angegebenen Datum (Montag bis Freitag) an. Stellen Sie beispielsweise "15W" im Tagestand fest, um den nächstgelegenen Arbeitstag bis zum 15. eines jeden Monats anzuzeigen. Wenn der 15. Samstag ist, suchen Sie nach dem letzten Freitag (14.) Auslöser. Wenn der 15. nicht wöchentlich ist, suchen Sie nach dem letzten Auslöser am Montag (16.). Wenn der 15. am Wochentag (Montag bis Freitag) ist, wird er an diesem Tag auslösen. Wenn das Format als "1W" angegeben ist, zeigt es den letzten Arbeitstag nach dem 1. eines jeden Monats an. Wenn der erste Samstag ist, wird er am 3. nächsten Montag ausgelöst. (Beachten Sie, dass nur bestimmte Zahlen vor "W" festgelegt werden können, und Intervalle "-" sind nicht zulässig).
# Seriennummer (repräsentiert die Woche eines jeden Monats), z. B. Einstellung "6# 3" im Feld Wöchent, zeigt den dritten Samstag im Monat an. Beachten Sie, dass, wenn "#5" angegeben ist, dass es in der fünften Woche keinen Samstag gibt, die Konfiguration nicht ausgelöst wird (es ist am besten für den Muttertag und den Vatertag geeignet).
Tipps:
'L' und 'W' kann in Kombination verwendet werden. Wenn "LW" auf dem Tagesfeld festgelegt ist, bedeutet dies, dass es am letzten Arbeitstag des Monats ausgelöst wird.
Die Einstellung des Feldes der Woche ist von Fall unempfindlich, wenn die englischen Buchstaben verwendet werden, dh Mon ist der gleiche wie Mon;
Siehe:
https://www.cnblogs.com/liaojie970/p/5913272.html
http://prisonbreak.iteye.com/blog/2247216