2012-03-20 2 views
4

Весенняя партийная документация говорит: «Spring Batch не будет пытаться остановить их от одновременного запуска» (http://static.springsource.org/spring-batch/reference/html-single/index.html).Как я могу гарантировать, что одновременно выполняется только одно задание JobInstance?

Но я хотел бы получить сообщение об ошибке, если попытаюсь запустить задание, и есть экземпляр этой работы. Является ли это возможным?

Я использую Spring Batch 2.1.8.

+0

Это не совсем то, о чем вы просили, но вы можете гарантировать, что одновременно запускается только одно задание с помощью исполнителя с атрибутом размера пула 1. Это приведет к тому, что задания будут стоять в очереди, с только один работает за раз. –

ответ

5

Если вы знаете, что последующая работа будет поставлен в очередь, вы можете использовать TaskExecutor.

  1. Инстанцировать Целевую исполнителя с максимальным размером пула, скажем, 500

    <task:executor id="poolTaskExecutor" pool-size="500"/> 
    
  2. ThrottledTaskexecutor

    ThrottledTaskExecutor будет проходить только заданное число задач, в то время выше poolTaskExecutor. Этот класс можно найти ниже в весеннем github, или вы можете скачать артефакт maven. https://github.com/SpringSource/spring-batch-admin/blob/master/spring-batch-admin-manager/src/main/java/org/springframework/batch/admin/util/ThrottledTaskExecutor.java

  3. Instantiate ThrottledTaskExecutor

    <bean id="throttledTaskExecutor" 
         class="org.springframework.batch.admin.util.ThrottledTaskExecutor"> 
        <property name="taskExecutor" ref="poolTaskExecutor" /> 
        <property name="throttleLimit" value="1"/> 
    </bean> 
    
  4. ThrottledJobLauncher

    <bean id="throttledJobLauncher" 
         class="org.springframework.batch.core.launch.support.SimpleJobLauncher"> 
        <property name="jobRepository" ref="jobRepository" /> 
        <property name="taskExecutor" ref="throttledTaskExecutor" /> 
    </bean> 
    

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

Фактически над именем poolTaskExecutor и классом ThrottledTaskexecutor является функция spring-batch-admin. Это отличная функция. Вам просто нужно определить ThrottledTaskExecutor с лимитом и включить в jobLauncher вашей работы.

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

  • Нет связанных вопросов^_^