2015-10-22 1 views
1

Как администратор партии весны останавливает текущую работу из пользовательского интерфейса.Как администратор партии весны останавливает работу?

В онлайн-документации весенней партии я прочитал следующие строки.

«Работа, которая выполняется может быть остановлена ​​пользователем (это , является ли или не спускаться на воду). Сигнал остановки передается через базу данных и один раз детектируются Spring Batch в любой процесс выполнения задания , задание остановлено (состояние перемещается из STOPPING в STOPPED), и дальнейшая обработка имеет место ".

Означает ли это, что пользовательский интерфейс Spring batch admin напрямую изменяет статус работы внутри таблицы весеннего стола?

UPDATE: Я пробовал выполнить нижеследующий запрос в текущей работе.

update batch_job_execution set status="STOPPED" where job_ins 
tance_id=19; 

Вышеуказанный запрос обновляется в БД, но весенняя партия не предназначена для остановки работы.

Если кто-то попробовал это, пожалуйста, разделяйте логику здесь.

ответ

0

Я исследовал весенний пакетный код. Кажется, они обновляют как версию, так и статус BATCH_JOB_EXECUTION.

Это работает для меня:

update batch_job_execution set status="STOPPED", version=version+1 where job_instance_id=19; 
+0

Ваш ответ не работает для меня. Работа не прекращена –

1

Вы запутаться между Batch Статус против выхода статуса. Что вы делаете с этим SQL, изменилось STATUS на STOPPED

Когда работа выполняется, вы можете остановить задание из кода. На каждом шаге итерации, проверьте их статус и, если STOPPING его набор, а затем отправьте шаг, чтобы остановить. В любом случае, что вы делаете, не изящно. Правильный способ объясняется в Common Batch Patterns -> 11.2 Stopping a Job Manually for Business Reasons

public class FooProcessor implements ItemProcessor<FooIn,FooOut>{ 
    public FooOut process(FooIn foo) throws Exception { 
     if (sendToStop(item)) { 
      throw new MyStopException("I need to Stop: " + item); 
     } 
     //do my stuff  
     return new FooOut(foo); 
    } 
} 

Еще один простой способ, чтобы остановить шаг чанк вернуть нуль в считывающее устройство. Это говорит нам о том, что нет больше элементов, чтобы перебирать читатель

public T read() throws Exception { 
      T item = delegate.read(); 
      if (ifNeedStop(item)) { 
       return null; // end the step here 
      } 
      return item; 
     } 
0

Если посмотреть в банки яровых пакетного администратора, вы можете увидеть, что в AbstractStep.java (весна-партия администратор класса) он проверяет статус Шаг и работа из базы данных.

Основываясь на этом статусе, он проверяет шаг перед его запуском.

Это хорошо работает для всех случаев, за исключением кусков, поскольку следующий шаг вызывается после большой обработки. Если вы хотите внедрить в нее, вы можете реализовать свой собственный прослушиватель, чтобы проверить статус (но это увеличит удары БД).

Смежные вопросы