Возможно ли запланировать весенний метод обслуживания только один раз в точно указанное время? Например, текущее время составляет 2 вечера, но когда я нажимаю кнопку действия, я хочу, чтобы мой метод обслуживания начинался с 8 вечера. Я знаком с аннотацией @Scheduled, и я не уверен, как писать выражение cron, чтобы оно не запускалось периодически. Этот @Scheduled(cron = "0 0 20 * * ?")
стреляет каждый день в 8 вечера.
Любые предложения?Задача Spring scheduling - запускать только один раз
ответ
Вы можете использовать одну из реализаций Spring TaskScheduler. Я привел нижеприведенный пример, который не требует слишком большой конфигурации (ConcurrentTaskScheduler, который обертывает однопоточный запланированный исполнитель).
Самый простой способ это один названный график, который принимает только Runnable и дату. Это вызовет задачу запускать один раз после указанное время. Все остальные методы позволяют планировать задачи для повторного запуска.
Подробнее о task execution & scheduling
Простой рабочий пример:
private TaskScheduler scheduler;
Runnable exampleRunnable = new Runnable(){
@Override
public void run() {
System.out.println("Works");
}
};
@Async
public void executeTaskT() {
ScheduledExecutorService localExecutor = Executors.newSingleThreadScheduledExecutor();
scheduler = new ConcurrentTaskScheduler(localExecutor);
scheduler.schedule(exampleRunnable,
new Date(1432152000000L));//today at 8 pm UTC - replace it with any timestamp in miliseconds to text
}
...
executeTaskT() //call it somewhere after the spring application has been configured
Примечание:
Чтобы включить поддержку @Scheduled и @Async аннотации добавить @EnableScheduling и @EnableAsync к одному из ваших @Configuration классов
Update - отменить запланированное задание
метод графика TaskScheduler в возвращающем ScheduledFuture который является замедленного действия на результате подшипник, который может быть отменен.
Итак, чтобы отменить его, вам нужно сохранить дескриптор запланированной задачи (т. Е. Сохранить объект возврата ScheduledFuture).
Изменения в коде выше для отмены задачи:
Объявите ScheduledFuture вне вашего метода executeTaskT.
private ScheduledFuture scheduledFuture;
Измените вызов, чтобы запланировать, чтобы сохранить обратный объект как таковой:
scheduledFuture = scheduler.schedule(exampleRunnable, new Date(1432152000000L));
Вызов отменить на объекте scheduledFuture где-то в коде
boolean mayInterruptIfRunning = true; scheduledFuture.cancel(mayInterruptIfRunning);
Это работает. Я расширил экземпляр ConcurrentTaskScheduler с исполнителем задачи управления потоками сервера, как этот «scheduler = new ConcurrentTaskScheduler (workManagerTaskExecutor, Executors.newSingleThreadScheduledExecutor())». Это тип 'org.springframework.scheduling.commonj.WorkManagerTaskExecutor' и предоставляется регистром сервера JNDI. – shx
Отлично, работал для меня. btw, если требуется runnable с параметрами, вы можете написать метод, который принимает параметр и возвращает Runnable, а затем передать этот метод в планировщике с параметром scheduler.schedule (createRunnable (param1), new Date (1432152000000L)); –
Является ли @Async обязательным для его достижения? – Angom
Для того, чтобы не создайте ScheduledExecutorService
и ConcurrentTaskScheduler
при каждом вызове метода удобно инициализировать TaskScheduler
при создании службы, например
private final TaskScheduler taskScheduler =
new ConcurrentTaskScheduler(Executors.newScheduledThreadPool(10));
@Async
не имеет смысла, так как мы просто запланировать задачу и выйти из метода.
- 1. Запускать событие только один раз?
- 2. Почему моя задача работает только один раз?
- 3. Повторяющаяся задача C#, выполняющаяся только один раз
- 4. сельдерея асинхронной задача выполняется только один раз
- 5. Breeze - запускать метаданные только один раз
- 6. Можно ли запускать javascript только один раз?
- 7. запускать задание cron только один раз
- 8. Запускать только один раз код в locationlistener
- 9. Запускать код только один раз в php
- 10. Java-кластер, запускать задачу только один раз
- 11. Задача WSO2 запускать ровно один раз при запуске
- 12. Session работает только один раз, Spring MVC,
- 13. Spring @Scheduled issue with Scheduling
- 14. Spring Scheduling с расчетным initialDelay
- 15. Spring Step Scheduling
- 16. Spring Scheduling: @Scheduled vs Quartz
- 17. Когда моя задача внутри цикла работает только один раз
- 18. Почему задача Rake в цикле выполняется только один раз?
- 19. ShinyR: запускать код только один раз после нажатия кнопки
- 20. Запускать функцию «не» в одной функции только один раз
- 21. Как запускать только одну функцию за один раз
- 22. Выполнить операцию только один раз, а затем всегда запускать главный
- 23. Как заставить часть программы запускать только один раз?
- 24. Планировщик задач Windows будет запускать приложение только один раз
- 25. JQuery Как сделать условие не запускать только один раз.
- 26. Android-модуль тестирует, как запускать метод только один раз
- 27. запускать запрос на обновление только один раз в php
- 28. UPDATE и INSERT должны запускать триггер только один раз
- 29. Как запускать данные только один раз в жизни всего приложения?
- 30. TimerTask работает только один раз
u можете использовать кварцевый планировщик :) –