Как сделать асинхронное весеннее пакетное задание с другим заданием
Я пытаюсь создать пакетное асинхронное задание Spring с другим заданием. Скажем, работа-1 должна быть завершена, а работа-2 должна быть выполнена. Но проблема в том, что Job-1 ждет, пока Job-2 завершает свою работу, чего я не хочу. Я также использовал JobStep, но это происходит синхронно и не помогает. Кто-нибудь может мне помочь, как использовать Асинхронно, где Задание-1 не должно ждать, пока Задание-2 не будет завершено? Пример XML-кода ниже
<bean id="taskExecutorAsync" class="org.springframework.core.task.SimpleAsyncTaskExecutor" />
<bean id="jobLauncherAsync" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
<property name="taskExecutor" ref="taskExecutorAsync" />
</bean>
<bean id="CreationProcess" class="test.CreationProcess">
<property name="jobLauncher" ref="jobLauncherAsync" />
<property name="jobRepository" ref="jobRepository" />
<property name="jobExplorer" ref="jobExplorer" />
</bean>
Спасибо
3 ответа
Я попытался создать отдельную тему, вернулся назад, и новая тема обновила детали. Невозможно создать новое асинхронное пакетное задание с пружиной в другом задании.
Короче говоря, вы не можете использовать JobStep
, Причина в том, что Job
это конечный автомат с каждым Step
выступающей в качестве государства. Для того, чтобы Job
чтобы перейти к следующему состоянию (то есть завершено в вашем случае использования), необходимо завершить текущее состояние (задание вашего ребенка).
Вы можете запускать задания из других заданий, но для этого вам нужно написать Tasklet
запустить задание в новом потоке (используя TaskExecutor
) и немедленно возвращайтесь.
Вы можете использовать исполнителя SimpleAsyncTaskExecutor, чтобы избежать блокировки.