У меня есть приложение для создания отчетов. Поскольку подготовка таких отчетов является тяжеловесом, они готовятся асинхронно с Spring Batch. Запросы на такие отчеты создаются через интерфейс REST с использованием HTTP.Как управлять количеством параллельных заданий пакетной весны
Цель состоит в том, что ресурс REST просто ставит в очередь выполнение и завершает выполнение отчета (as described in documentation). Таким образом, TaskExecutor было предусмотрено для JobLauncher:
<bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
<property name="taskExecutor">
<bean class="org.springframework.core.task.SimpleAsyncTaskExecutor"/>
</property>
</bean>
Поскольку доклады действительно тяжеловес, только определенное число их может быть произведено в данный момент времени. Надеясь, чтобы иметь возможность настроить Spring Batch для получения 2 экземпляров только на один раз, concurrencyLimit был указан:
<bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
<property name="taskExecutor">
<bean class="org.springframework.core.task.SimpleAsyncTaskExecutor">
<property name="concurrencyLimit" value="2" />
</bean>
</property>
</bean>
К сожалению, когда 2 рабочих места уже работает, звонок работы запуска заблокирован: jobLauncher. run (job, builder.toJobParameters());
Видимо jobLauncher немедленно пытается выполнить задание. Я бы предположил, что это скорее очередь для выполнения, как только поток доступен. Таким образом, я мог бы масштабировать свое приложение, просто добавляя дополнительные экземпляры обработки, все из которых используют одну и ту же базу данных репозитория.
Аналогичный вопрос был asked here. Я собираюсь начать изучение Spring Batch Integration, но я не уверен, что это правильное направление.
Мое служение не кажется таким необычным для меня, не должно ли быть широко обсуждаемого шаблона для него, которого я, по-видимому, не могу найти?
Благодаря F
Кроме того, вы сможете установить число потоков в пуле потоков. – rdllopes