Как определить время остановки org.quartz.JobDetail во время выполнения? - PullRequest
1 голос
/ 08 августа 2011

Как я могу запланировать время, чтобы остановить и убить одну работу с самого начала выполнения задачи?Например, определите, что если через час задача все еще работает, она будет остановлена ​​и удалена.(Я не имею в виду повторную задачу) Я использую с org.quartz.Scheduler и org.quartz.JobDetail в java

большое спасибо

Ответы [ 3 ]

0 голосов
/ 11 августа 2011

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

  1. Очень легко отследить, как долго задание выполнялось изнутри задания
  2. Если задание нужно остановить, его легко остановитьизящно и отложите в сторону работу, которую она выполняла
  3. Ваша работа может быть в состоянии определить прогресс работы, которую она выполняет, и, если она близка к выполнению, отпустить ее за пределы времени уничтожения + 10% или что-то еще
0 голосов
/ 11 ноября 2011
If you change your class to implement StatefulJob instead of Job, Quartz will take care of this for you. From the StatefulJob javadoc:

stateful jobs are not allowed to execute concurrently, which means new triggers that occur before the completion of the execute(xx) method will be delayed.

StatefulJob extends Job and does not add any new methods, so all you need to do to get the behaviour you want is change this:

public class YourJob implements org.quartz.Job {
    void execute(JobExecutionContext context) {/*implementation omitted*/}
}
To this:

public class YourJob implements org.quartz.StatefulJob {
    void execute(JobExecutionContext context) {/*implementation omitted*/}
} 

Здесь есть еще несколько вариантов

0 голосов
/ 08 августа 2011

Возможно, вы захотите взглянуть на интерфейс org.quartz.InterruptableJob (который расширяет Job) и метод interrupt () в планировщике.

Если вы действительно хотите вызвать Thread.interrupt () впотоки в пуле рабочих потоков, вероятно, вам потребуется реализация org.quartz.spi.ThreadPool.

...