У меня есть Spring-Batch, которое я запускаю с контроллера Spring MVC. Контроллер получает загруженный файл от пользователя, и работа должна обработать файл:Spring Batch: запуск задания из контрллера Spring MVC С НОВЫМ РЕЗЬБОЙ
@RequestMapping(value = "/upload")
public ModelAndView uploadInventory(UploadFile uploadFile, BindingResult bindingResult) {
// code for saving the uploaded file to disk goes here...
// now I want to launch the job of reading the file line by line and saving it to the database,
// but I want to launch this job in a new thread, not in the HTTP request thread,
// since I so not want the user to wait until the job ends.
jobLauncher.run(
jobRegistry.getJob(JOB_NAME),
new JobParametersBuilder().addString("targetDirectory", folderPath).addString("targetFile", fileName).toJobParameters()
);
return mav;
}
Я попытался следующий XML конфигурации:
<job id="writeProductsJob" xmlns="http://www.springframework.org/schema/batch">
<step id="readWrite">
<tasklet task-executor="taskExecutor">
<chunk reader="productItemReader" writer="productItemWriter" commit-interval="10" />
</tasklet>
</step>
</job>
<bean id="taskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="5" />
<property name="maxPoolSize" value="5" />
</bean>
... но кажется, что многопоточность происходит только внутри самих границ работы. I.e., поток контроллера ожидает завершения задания, а выполнение задания обрабатывается несколькими потоками (что хорошо, но не главное, что я хотел). Главное, что я хотел, так это то, что задание будет запущено в отдельном потоке (или потоках), в то время как поток контроллера продолжит выполнение, не дожидаясь окончания потоков задач.
Есть ли способ достичь этого с помощью Spring-batch?
Спасибо! именно то, что я хотел! новичка начинающего :) – rapt
Вторая ссылка - 404, пожалуйста, уточните правильную ссылку. – Rembo