Есть ли cron-подобная реализация ScheduledExecutorService в Java?
Вопрос
ScheduledExecutorService в Java очень удобен для повторения задач с фиксированными интервалами или с фиксированной задержкой. Мне было интересно, есть ли что-то вроде существующего ScheduledExecutorService, которое позволяет вам указать время дня для планирования задачи, а не интервал, т.е. ;. р>
Я знаю, что вы можете добиться этого с помощью Quartz, но я бы предпочел не использовать эту библиотеку, если это возможно (это отличная библиотека, но я бы не хотел иметь зависимость по нескольким причинам).
Другие советы
Появилось немного больше поиска CronExecutorService в HA-JDBC. Интересно, что у него есть зависимость от Quartz для его CronExpression Класс, но это все. Это не так уж плохо.
Обновление: я исправил неработающие ссылки, чтобы указывать на новые версии, но я не знаю, является ли это единственной зависимостью больше
ThreadPoolTaskScheduler, может использоваться, когда управление внешними потоками не является обязательным требованием. Внутренне он делегирует экземпляру ScheduledExecutorService . ThreadPoolTaskScheduler также реализует интерфейс Spring & # 8217; 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));
}
}
Когда вы используете scheduleAtFixedRate, вы предоставляете задержку. Таким образом, задержка может составлять разницу до 10 часов утра, а период составляет 24 часа. Это может немного сместиться даже с таймером, поэтому вы можете запланировать задачу, которая добавляет себя в ScheduledExecutorService с соответствующей задержкой каждый раз.
JT Cron