Muszę zaplanować uruchamianie zadania w ustalonym odstępie czasu. Jak mogę to zrobić z obsługą długich interwałów (na przykład co 8 godzin)?
Obecnie używam java.util.Timer.scheduleAtFixedRate
. Czy java.util.Timer.scheduleAtFixedRate
obsługuje długie przedziały czasowe?
TimeUnit
dotyczy to zarównoinitialDelay
iperiod
. Bieganie co 24 godzin będzie w końcu jest wyrzucony podczas kopnięcia w DST, aleTimeUnit
zDAYS
nie pozwalają określić drobnoziarnistegoinitialDelay
. (Myślę, że wewnętrzna implementacja ScheduledExecutorServiceDAYS
i tak konwertuje na nanosekundy).Powinieneś spojrzeć na Quartz , jest to framework java, który współpracuje z edycjami EE i SE i pozwala zdefiniować zadania do wykonania w określonym czasie
źródło
Spróbuj w ten sposób ->
Najpierw utwórz klasę TimeTask, która uruchomi twoje zadanie, wygląda to tak:
następnie w klasie głównej tworzysz zadanie i uruchamiasz je okresowo rozpoczynając od określonej daty:
źródło
Użyj Google Guava
AbstractScheduledService
jak podano poniżej:}
Jeśli masz więcej takich usług, rejestracja wszystkich usług w ServiceManager będzie dobra, ponieważ wszystkie usługi można uruchamiać i zatrzymywać razem. Przeczytaj tutaj, aby uzyskać więcej informacji o ServiceManager.
źródło
Jeśli chcesz się trzymać
java.util.Timer
, możesz użyć go do planowania w dużych odstępach czasu. Po prostu zdasz okres, w którym strzelasz. Sprawdź dokumentację tutaj .źródło
Te dwie klasy mogą współpracować, aby zaplanować okresowe zadanie:
Zaplanowane zadanie
Uruchom zaplanowane zadanie
Odniesienie https://www.mkyong.com/java/how-to-run-a-task-periodically-in-java/
źródło
Jeśli Twoja aplikacja korzysta już ze środowiska Spring, masz wbudowane Planowanie
źródło
Zrób coś co sekundę
źródło
Korzystam z funkcji Spring Framework. ( zależność jar lub maven w kontekście wiosny ).
ScheduledTask to mój własny interfejs z moją niestandardową metodą wykonywania , którą nazywam moim zaplanowanym zadaniem.
źródło
Czy próbowałeś już Spring Scheduler za pomocą adnotacji?
możesz to zrobić również za pomocą xml.
źródło
mój serwlet zawiera to jako kod, jak zachować to w harmonogramie, jeśli użytkownik naciśnie akceptację
źródło