Ich habe einen Frühling Boot-Anwendung mit verschiedenen Disponenten, die die @Scheduled Annotation verwenden. Einige der Zeitpläne werden mit fixedRate eingerichtet, andere verwenden cron. Die fixedRate-Zeitpläne laufen gut, aber mir ist aufgefallen, dass die tatsächliche Zeit, in der der Cron-Befehl ausgelöst wird, im Laufe des letzten Monats um 1-2 Stunden pro Tag variiert.Frühling Geplante Cronjobs zur falschen Zeit Brennen
das heißt einen Job mit cron-Setup von
@Scheduled(cron = "0 0 2 * * *")
wird um 3:00 Uhr Feuer statt 02.00. Es passiert auch nicht jeden Tag. Es wird für ein paar Tage hintereinander zur gleichen Zeit ausgeführt, dann passiert etwas und es wird jedes Mal um eine weitere Stunde ausgeschaltet, bis ich die Anwendung neu starte.
Die Systemzeit auf dem Server genau ist, bin ich alle hier aus Ideen. Ist das schon mal jemand begegnet?
EDIT 1
ich in einiger Protokollierung setzen, um festzustellen, ob die Aufträge im gleichen Intervall Brennen falsch waren, und die Ergebnisse scheinen zufällig. Hier sind die Start-/Endzeiten für die oben genannten Cron-Job über drei Tage:
Format: Calendar.getInstance().getTime() (System.currentTimeMillis())
Start: Sat Oct 21 03:14:15 CDT 2017 (1508573655778)
End: Sat Oct 21 03:22:24 CDT 2017 (1508574144708)
Start: Sun Oct 22 02:26:58 CDT 2017 (1508657218774)
End: Sun Oct 22 02:35:12 CDT 2017 (1508657712492)
Start: Mon Oct 23 02:00:03 CDT 2017 (1508742003072)
End: Mon Oct 23 02:08:11 CDT 2017 (1508742491493)
Hey Blake. Ich habe letzten Freitag ein wenig Logging hinzugefügt und es über das Wochenende laufen lassen, um einige Ergebnisse zu sammeln. Ich habe diese Ergebnisse in meiner ursprünglichen Frage veröffentlicht. –
Ja, es scheint so, als würden die Startzeiten nicht nach einem Zeitplan ablaufen, wenn es das ist, was sie tun sollen. Welche anderen Anmerkungen hast du? ist die geplante Methode in einer Federkomponente, einem Controller oder einer Serviceklasse? – Blake
Endlich herausgefunden. Ich hatte keine ThreadPoolTaskScheduler-Einrichtung, daher war die Poolgröße nicht groß genug, um alle geplanten Jobs zu unterstützen. Man würde schießen, würden die andere entweder blockiert werden, oder auf irgendeine Art von interner Warteschlange gestellt, aber wenn sie schließlich dann der cron Uhr abgefeuert wird ausgeglichen durch wie lange wurden sie Warteschlange/gesperrt. –