重用现有服务
批处理系统通常与其他应用程序样式结合使用。最
Common 是一个在线系统,但它也可能支持集成甚至厚客户端
应用程序,通过移动每个应用程序样式使用的必要批量数据。为此
原因,许多用户希望重用现有的 DAO 或
他们的批处理作业。Spring 容器本身通过允许任何
必要的类。但是,在某些情况下,现有服务
需要充当ItemReader
或ItemWriter
,要么满足
另一个 Spring Batch 类,或者因为它确实是主要的ItemReader
一步。是的
为每个需要包装的服务编写一个适配器类相当简单,但是
因为它是一个非常普遍的问题,Spring Batch 提供了实现:ItemReaderAdapter
和ItemWriterAdapter
.这两个类都实现了标准 Spring
方法,并且设置起来相当简单。
-
Java
-
XML
以下 Java 示例使用ItemReaderAdapter
:
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 示例使用ItemReaderAdapter
:
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" />
需要注意的重要一点是,合同的targetMethod
必须相同
作为合同read
:用尽时返回null
.否则,它返回一个Object
.任何其他事情都会阻止框架知道何时应该结束处理,
导致无限循环或错误失败,具体取决于实现
的ItemWriter
.
-
Java
-
XML
以下 Java 示例使用ItemWriterAdapter
:
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 示例使用ItemWriterAdapter
:
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" />