我是Spring Batch的真正新手,所以我试图解决一些问题并了解它。但是,我坚持使用其中一个。
想象一下,来自不同供应商的两个数据源在CVS中以不同的格式(例如他们的库存)描述相同的事物。因此,我使用两个不同的Reader来统一公共对象Product
中的数据。然后我必须累积所有产品(通过他们的名字)并合并每种产品的可用库存。导出是一个包含所有可用产品及其库存号(CSV)的报告。
我应该如何对Spring Batch的问题进行分区并处理所有元素?
提前致谢。
答案 0 :(得分:1)
您的流程步骤:
1)在嵌入式(内存)数据库中创建一个表
2)第一步应截断此表,您可以在其中定义作业中的tasklet: -
<batch:step id="truncateTempTableFrOrder" next="readWriteDataOfSource1">
<batch:tasklet ref="truncateTempTableTasklet" />
</batch:step>
3)现在,接下来的两个步骤应该只从两个数据源获取数据并将该数据写入临时表,两个步骤可以配置如下:
<batch:step id="readWriteDataOfSource1" next="readWriteDataOfSource2">
<batch:tasklet>
<batch:chunk reader="dataReader" writer="dataWriter"
commit-interval="100" />
</batch:tasklet>
</batch:step>
使用 org.springframework.batch.item.database.JdbcCursorItemReader 从数据源读取数据,使用 org.springframework.batch.item.database.JdbcBatchItemWriter 写入数据库
4)现在,您的最后一步是使用上一步中提到的jdbc reader从临时表读取数据,然后使用 org.springframework.batch.item.file.FlatFileItemWriter 编写数据。
您可以在从临时表中获取数据时在选择查询中执行数据处理。 如何在Spring批处理中配置读者和作者,你可以参考任何好的教程或Spring Batch in Action(书)。