Есть ли cron-подобная реализация ScheduledExecutorService в Java?

StackOverflow https://stackoverflow.com/questions/469884

  •  19-08-2019
  •  | 
  •  

Вопрос

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 с соответствующей задержкой каждый раз.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top