通过Spring Batch从csv文件中读取产品数据,并将数据导入数据库。 CSV文件: product.csv ID,名称 1,product1 2,product2 product-attributes.csv(按产品ID排序) 产品编号,名称 1,宽度 1,身高 1,重量 2,宽度 2,身高 ...
春季批处理有可能吗?
我对流程的想法是:
FlatFileItemReader
(产品)读取一行,然后FlatFileItemReader
(产品属性)读取所有带有id=productId
的行
处理器创建具有现有属性的产品实体
作者将具有级联关系的产品实体写入数据库。
这可能吗?使用CompositeReader
是否正确?
答案 0 :(得分:0)
您可以将每个文件加载到暂存表中,将这些表中的数据联接起来,然后将联接的结果写入目标表中。
另一种方法是使用SystemCommandTasklet
通过join
命令联接文件(在Unix系统上或在ms Windows上等效),然后配置面向块的步骤,该步骤读取加入文件并将其加载到数据库中。
希望这会有所帮助。
答案 1 :(得分:0)
这是春季批处理的完美示例。 Input-Process-Output是SpringBatch面向的处理类型。 Take a look at this example-我认为它完全符合您的意愿。用逗号将读者定义为分隔符,将作家作为数据库插入。
回答您的特定问题,是的,复合阅读器会有所帮助,因为您正在阅读2个文件。 See these examples。您还可以实现您的编写器来读取两个文件,并删除复合阅读器的要求。实现方式将取决于您要如何处理数据。我相信复合阅读器将读取第一个文件的一部分,然后读取第二个文件的一部分,然后移至处理部分。
Here is another SO related question,您可能会从阅读中受益。