当前版本仍在开发中,尚不被视为稳定版本。最新稳定版请使用 Spring Batch 文档 6.0.2!

异步处理器

异步处理器可以帮助你扩展条目处理能力。在异步处理器的使用场景中, AsyncItemProcessor 充当调度器,在新线程中执行某个条目的 ItemProcessor 逻辑。条目处理完成后,会将对应的 Future 传递给 AsyncItemWriter 进行写出。

因此,通过异步条目处理可以提升性能,本质上相当于实现一种 fork-join 场景。 AsyncItemWriter 会收集处理结果,并在所有结果都可用后立即将该 chunk 写出。

  • Java

  • XML

下面的示例展示了如何在 Java 中配置 AsyncItemProcessor

Java Configuration
@Bean
public AsyncItemProcessor processor(ItemProcessor itemProcessor, TaskExecutor taskExecutor) {
    AsyncItemProcessor asyncItemProcessor = new AsyncItemProcessor();
    asyncItemProcessor.setTaskExecutor(taskExecutor);
    asyncItemProcessor.setDelegate(itemProcessor);
    return asyncItemProcessor;
}

下面的示例展示了如何在 XML 中配置 AsyncItemProcessor

XML Configuration
<bean id="processor"
    class="org.springframework.batch.integration.async.AsyncItemProcessor">
  <property name="delegate">
    <bean class="your.ItemProcessor"/>
  </property>
  <property name="taskExecutor">
    <bean class="org.springframework.core.task.SimpleAsyncTaskExecutor"/>
  </property>
</bean>

delegate 属性指向你的 ItemProcessor Bean, 而 taskExecutor 属性则指向你所选择的 TaskExecutor

  • Java

  • XML

下面的示例展示了如何在 Java 中配置 AsyncItemWriter

Java Configuration
@Bean
public AsyncItemWriter writer(ItemWriter itemWriter) {
    AsyncItemWriter asyncItemWriter = new AsyncItemWriter();
    asyncItemWriter.setDelegate(itemWriter);
    return asyncItemWriter;
}

下面的示例展示了如何在 XML 中配置 AsyncItemWriter

XML Configuration
<bean id="itemWriter"
    class="org.springframework.batch.integration.async.AsyncItemWriter">
  <property name="delegate">
    <bean id="itemWriter" class="your.ItemWriter"/>
  </property>
</bean>

同样,delegate 属性实际上引用的是你的 ItemWriter Bean。