如何在另一个作业中进行异步弹簧批处理作业

时间:2016-08-11 21:31:25

标签: java spring spring-batch

我正在尝试在另一个作业中创建 Spring批量异步作业。说Job-1应该完成并且Job-2应该被执行。但问题是Job-1正在等待Job-2完成,我不想要。我也使用过JobStep,但它以同步方式发生,没有用。有人可以帮助我如何异步使用Job-1不应该等到Job-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 个答案:

答案 0 :(得分:0)

您可以使用SimpleAsyncTaskExecutor执行器来避免阻塞。

答案 1 :(得分:0)

我尝试创建一个单独的线程,返回并且新线程更新了详细信息。无法在另一个作业中创建新的异步弹簧批处理作业。

答案 2 :(得分:0)

简而言之,您无法使用JobStep。原因是因为Job是状态机,每个Step用作状态。为了使Job转换到下一个状态(在您的用例中也称为完成状态),需要完成当前状态(您的子作业)。

您可以从其他作业启动作业,但为此,您需要编写Tasklet以在新线程上启动作业(使用TaskExecutor)并立即返回。 / p>