4.4 Configuring a JobLauncher

JobLauncher 最基本的实现是 SimpleJobLauncher,它唯一的依赖是通过 JobRepository 获取一个 execution

  1. <bean id="jobLauncher"
  2. class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
  3. <property name="jobRepository" ref="jobRepository" />
  4. </bean>

一旦获取到 JobExecution ,那么可以通过执行Job的方法,最终将JobExecution返回给调用者:

同步执行的Job加载时序图

从调度启动时,整个序列能够很好的直接工作,但是,从HTTP请求中启动则会出现一些问题。在这种场景中,启动任务需要异步操作,让SimpleJobLauncher能够立刻返回结果给调用者,如果让HTTP请求一直等待很长时间知道批处理任务完成获取到执行结果,是很糟糕的操作体验。一个流程如下图所示:

异步加载时序图

通过配置TaskExecutor可以很容易的将SimpleJobLauncher配置成异步操作:

  1. <bean id="jobLauncher"
  2. class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
  3. <property name="jobRepository" ref="jobRepository" />
  4. <property name="taskExecutor">
  5. <bean class="org.springframework.core.task.SimpleAsyncTaskExecutor" />
  6. </property>
  7. </bean>

TaskExecutor 接口的任何实现都能够用来控制job的异步执行。