重用现有服务

批处理系统通常与其他应用程序样式结合使用。最 common 是一个在线系统,但它也可能支持集成甚至胖客户端 应用程序,方法是移动每个应用程序样式使用的必要批量数据。对于这个 原因,许多用户希望重用现有的 DAO 或其他服务 他们的批处理作业。Spring 容器本身通过允许任何 necessary 类。但是,在某些情况下,现有服务 需要充当 or ,以满足 另一个 Spring Batch 类,或者因为它确实是某个步骤的 main。是的 为每个需要包装的服务编写一个 Adapter 类相当简单,但是 因为它是一个常见的问题,所以 Spring Batch 提供了 implementations: 和 。这两个类都实现了标准的 Spring 方法,并且设置起来相当简单。ItemReaderItemWriterItemReaderItemReaderAdapterItemWriterAdapterspring-doc.cn

下面的 Java 示例使用 :ItemReaderAdapterspring-doc.cn

Java 配置
@Bean
public ItemReaderAdapter itemReader() {
	ItemReaderAdapter reader = new ItemReaderAdapter();

	reader.setTargetObject(fooService());
	reader.setTargetMethod("generateFoo");

	return reader;
}

@Bean
public FooService fooService() {
	return new FooService();
}

下面的 XML 示例使用 :ItemReaderAdapterspring-doc.cn

XML 配置
<bean id="itemReader" class="org.springframework.batch.item.adapter.ItemReaderAdapter">
    <property name="targetObject" ref="fooService" />
    <property name="targetMethod" value="generateFoo" />
</bean>

<bean id="fooService" class="org.springframework.batch.item.sample.FooService" />

需要注意的一点是 的合同必须相同 作为 的协定 : 当用尽时,它将返回 。否则,它将返回一个 .其他任何阻止框架知道处理何时结束、 导致无限循环或错误失败,具体取决于实现 的 .targetMethodreadnullObjectItemWriterspring-doc.cn

下面的 Java 示例使用 :ItemWriterAdapterspring-doc.cn

Java 配置
@Bean
public ItemWriterAdapter itemWriter() {
	ItemWriterAdapter writer = new ItemWriterAdapter();

	writer.setTargetObject(fooService());
	writer.setTargetMethod("processFoo");

	return writer;
}

@Bean
public FooService fooService() {
	return new FooService();
}

下面的 XML 示例使用 :ItemWriterAdapterspring-doc.cn

XML 配置
<bean id="itemWriter" class="org.springframework.batch.item.adapter.ItemWriterAdapter">
    <property name="targetObject" ref="fooService" />
    <property name="targetMethod" value="processFoo" />
</bean>

<bean id="fooService" class="org.springframework.batch.item.sample.FooService" />