Java - планирование ежедневных задач - PullRequest
7 голосов
/ 01 мая 2009

Я ищу эффективный способ выполнения метода каждый день в 3 часа дня, независимо от того, когда приложение запускалось изначально или как долго оно выполнялось.

Это должно быть сделано полностью из приложения без вмешательства ОС (например, Windows Task Scheduler)

Я экспериментировал с java.util.Timer в разных конфигурациях, но не добился успеха.

Любая помощь будет оценена.

Спасибо.

Ответы [ 6 ]

16 голосов
/ 01 мая 2009

Вы должны взглянуть на Кварц , который является системой планирования заданий на основе Java.

2 голосов
/ 01 мая 2009

Встроенный способ JDK - делать то, что предлагали другие, и сначала вычислять:

  • currentTime - желаемый Time

Затем вы можете использовать что-то вроде Исполнитель расписания для отправки задач и запуска их с определенной задержкой. Это намного проще, чем варианты, которые есть у вас с такими платформами, как Quartz , но не требует внешней зависимости.

Кроме того, вы всегда должны указывать, какой JDK вы используете, чтобы люди могли предоставить решения для вашей версии JDK.

2 голосов
/ 01 мая 2009

Вы, вероятно, захотите использовать что-то вроде кварцевого механизма , которое может выполнять такие вещи, как выполнение пропущенных задач (например, во время сбоя ahem ), и это избавляет от попытки попробовать управлять потоками.

Например, если вы используете потоки и переводите их в спящий режим и будите их через 86400 секунд (один день), вы проснетесь и на час позже (день = 82800 секунд) или рано (день = 90000 секунд) при переходе на летнее время. день, так что будьте осторожны с любым решением, которое вы выберете

1 голос
/ 01 мая 2009

Jcrontab

Jcrontab - это планировщик, написанный на Java. Цель проекта - предоставить полностью функциональные графики для проектов Java.

1 голос
/ 01 мая 2009

Как утверждают другие, Quartz - это выбор, с его помощью вы можете выполнять cron-подобные операции, задания или триггеры, вот ссылка на эту тему: http://www.ibm.com/developerworks/java/library/j-quartz/index.html

1 голос
/ 01 мая 2009

Вы можете запустить поток, который рассчитывает разницу до следующих 3 часов дня и спит в течение этого времени. Когда он просыпается, он выполняет метод, пересчитывает и спит. Это то, что вы имели в виду?

...