Весенний пакет: повторите попытку, если не завершится в определенное время

Я работаю над пакетным приложением Spring, в котором я использовал RetryTemplate с SimpleRetryPolicy.

В этом приложении ItemProcessor обычно занимает 30-35 минут на выполнение конкретной задачи. Но иногда на выполнение той же задачи уходит более 2 часов.

Есть ли способ повторить попытку моего ItemProcessor, если назначенная задача не будет завершена в течение заданного периода времени?

Я ищу встроенную функциональность Java / Spring вместо написания собственной логики тайм-аута.


person Sachin Mhetre    schedule 30.04.2018    source источник
comment
Как вы его останавливаете, когда время выходит за рамки лимита?   -  person Michael Minella    schedule 30.04.2018
comment
@MichaelMinella В настоящее время это продолжается, пока работа не будет завершена. Таким образом, выполнение работы - это предел прямо сейчас.   -  person Sachin Mhetre    schedule 30.04.2018
comment
Вы хотите остановить задание на отметке 35 минут или просто перезапустить его снова и дать завершиться первому экземпляру?   -  person Michael Minella    schedule 30.04.2018
comment
Я хочу повторить то же задание с исключением TimedOut Exception.   -  person Sachin Mhetre    schedule 30.04.2018
comment
@SachinMhetre, что-то вроде этого наверное?   -  person Tarun Lalwani    schedule 02.05.2018
comment
@TarunLalwani, я думаю, это показывает временной интервал между повторными попытками. Я ищу исключения типа TimedOut. т.е. если работа не завершена в заданное время, должно быть сгенерировано исключение.   -  person Sachin Mhetre    schedule 03.05.2018
comment
Единственная другая информация, которую я нашел, - это forum.spring.io/forum/spring-projects/batch/, посмотрите, сможете ли вы реализовать то, что он говорит   -  person Tarun Lalwani    schedule 03.05.2018
comment
Итак, что вы пытаетесь сделать, так это установить максимальный тайм-аут, верно?   -  person Pedro Tavares    schedule 03.05.2018


Ответы (1)


Вы можете определить transactional-attributes для данного шага. (https://docs.spring.io/spring-batch/trunk/reference/htmlsingle/#transactionAttributes)

Атрибуты транзакции можно использовать для управления настройками изоляции, распространения и тайм-аута.

<step id="step1">
  <tasklet>
      <chunk reader="itemReader" writer="itemWriter" commit-interval="2"/>
      <transaction-attributes isolation="DEFAULT"
                              propagation="REQUIRED"
                              timeout="30"/>
  </tasklet>
</step>

Если вы используете конфигурацию Java, проверьте https://stackoverflow.com/a/23921558/1942642.

person Pedro Tavares    schedule 03.05.2018