Есть ли cron-подобная реализация ScheduledExecutorService в Java? - PullRequest
4 голосов
/ 22 января 2009

ScheduledExecutorService в Java очень удобен для повторения задач с фиксированными интервалами или фиксированной задержкой. Мне было интересно, есть ли что-то вроде существующего ScheduledExecutorService, которое позволяет вам указать время дня для планирования задачи, а не интервал, т.е. "Я хочу, чтобы эта задача запускалась в 10:00 каждый день".

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

Ответы [ 5 ]

3 голосов
/ 23 января 2009

Появилось немного больше поиска CronExecutorService в HA-JDBC. Интересно, что у него есть зависимость от Quartz для его класса CronExpression , но это так. Это не так уж плохо.

Обновление: я исправил неработающие ссылки, чтобы указывать на новые версии, но я не знаю, является ли это единственной зависимостью больше

2 голосов
/ 22 января 2009

Вы можете использовать класс Таймер . В частности, scheduleAtFixedRate (задача TimerTask, дата первого времени, длительный период). Где вы можете задать задачу, чтобы начать в 10 утра в определенный день и повторять каждые 24 часа.

1 голос
/ 26 марта 2017

ThreadPoolTaskScheduler, может использоваться, когда управление внешним потоком не является обязательным требованием. Внутренне он делегирует экземпляру ScheduledExecutorService . ThreadPoolTaskScheduler фактически реализует также интерфейс Spring's TaskExecutor , так что один экземпляр можно использовать для асинхронного выполнения как можно скорее, а также для запланированных и потенциально повторяющихся выполнений.

Где CronTrigger () принимает cronExpression http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html

Для получения дополнительной информации об этом решении см. Документы Spring: https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html

import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import java.util.Date;

public class CronTriggerSpringTest{
public static void main(String args[]){
    String cronExpression = "0/5 * * * * *";
    ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
    scheduler.initialize();
    scheduler.schedule(new Runnable() {
        @Override
        public void run() {
            System.out.println("Hello Date:"+new Date());
        }
    }, new CronTrigger(cronExpression));
}
}
1 голос
/ 23 января 2009
1 голос
/ 22 января 2009

Когда вы используете scheduleAtFixedRate, вы предоставляете задержку. Таким образом, задержка может составлять разницу до 10 часов утра, а период составляет 24 часа. Это может немного сойти, даже с таймером, поэтому вы можете запланировать задачу, которая добавляет себя в ScheduledExecutorService с соответствующей задержкой каждый раз.

...