use*_*505 12 spring-integration spring-batch
我做了一些搜索,但找不到任何样本/示例.
我需要读取一个表(输入)的地理坐标,处理它以生成与坐标相关的POI.因此,一个地理坐标将导致需要将一个或多个POI插入另一个表(输出).
我目前正在使用JdbcCursorItemReader和JdbcBatchItemWriter来读取一个项目/记录并写入一个项目/记录.还有一个ItemProcessor,它为给定的地理坐标生成POI.
自定义JdbcBatchItemWriter是否帮助我实现了这一目标?
有任何想法吗?TIA.
tol*_*ius 10
你真正想要的是一个Splitter模式:

以下是Spring Integration中的定义方式:
Splitter是一种消息端点,其职责是从其输入通道接受消息,将该消息拆分为多个消息,然后将每个消息发送到其输出通道.这通常用于将"复合"有效载荷对象划分为包含细分有效载荷的一组消息.
配置非常简单:
<channel id="inputChannel"/>
<splitter id="splitter"
ref="splitterBean"
method="split"
input-channel="inputChannel"
output-channel="outputChannel" />
<channel id="outputChannel"/>
<beans:bean id="splitterBean" class="sample.PojoSplitter"/>
Run Code Online (Sandbox Code Playgroud)
或者您可以使用注释:
@Splitter
List<LineItem> extractItems(Order order) {
return order.getItems()
}
Run Code Online (Sandbox Code Playgroud)
JdbcBatchItemWriter如果感觉更简单,你当然可以写自己的.但是,Spring Integration已经为您完成了它.
您可以使用Spring Integration JDBC Support => jdbc:inbound-channel-adapter/ jdbc:outbound-channel-adapter和上面的拆分器来实现您想要的和简单.
如果您只想将项目分发给其他编写者(读取重复的输出),则可以使用现有的CompositeItemWriter
但是我不确定您的处理器是否会生成不同的项目类型,或者您是否想将一种复杂项目类型的内容分发给多个作者,在这种情况下,您可以对多行记录作者问题使用略有更改的版本
public class MultiOutputItemWriter implements ItemWriter<Object> {
private JdbcBatchItemWriter<ClassFoo> delegateFoo;
private JdbcBatchItemWriter<ClassBar> delegateBar;
public void write(List<? extends Object> items) throws Exception {
// if you have different types of items
// check Object Class
// add to new List<Classfoo>
// call delegate e.g. delegateFoo.write(List with ClassFoo);
//
// or if you have complex objects
// same procedure as above, but with
// add to new List<Classfoo> with item.getClassFoo
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用FlatFileItemWriter,请不要忘记将委托注册为ItemStreams(因此spring batch将为您打开/关闭它们)
| 归档时间: |
|
| 查看次数: |
19088 次 |
| 最近记录: |