我正在开发一个Spring Batch作业,它创建一个基于sql insert,delete或update语句的字符串。它读取一个flatfile,其中每行的前三个字符是add
,chg
或del
。
示例:
ADD123456001SOUTHLAND PAPER INCORPORATED ... //more info
CHG123456002GUERNSEY BIG DEAL FAIRFAX ...//more info
DEL123456002GUERNSEY BIG DEAL FAIRFAX ...//more info
根据以上陈述,我的ItemReader将生成三个字符串:insert into ...
,update ...
和delete ...
。读者读入整个flatfile,将这些字符串的arraylist返回给我的编写器,我的编写器将读取这些字符串并写入我的数据库。
这是我的问题。如果在请求chg
之前请求了add
,会发生什么?如果我尝试更改已删除的内容该怎么办?
我在SpringDocs上阅读了ItemProcessor,过滤过程的描述正是我想要做的:
例如,考虑一个读取包含三个文件的批处理作业 不同类型的记录:要插入的记录,要更新的记录,以及 要删除的记录。如果系统不支持记录删除, 那么我们不希望向ItemWriter发送任何“删除”记录。 但是,由于这些记录实际上不是坏记录,我们希望 过滤掉它们,而不是跳过。结果,ItemWriter 只会收到“插入”和“更新”记录。
但是文档中列出的ItemProcessor
示例对我来说并不合理。有人能够理解我的过程吗?或者向我展示一些好的ItemProcessing的例子?
编辑:命令后面的6个字符是SQL数据库中的id。
答案 0 :(得分:1)
在问题中描述的情况下,您不会过滤掉记录,您只想更改它们所经历的顺序。您最好先在此处对文件进行排序(至首先进行插入,然后进行更新,然后进行删除)。 ItemProcessor更多地用于过滤偶尔的坏或不相关的输入行。
您可以使用ItemProcessor验证更新或删除的行是否存在,或者要添加的行是否已经存在。在这里,我想知道你在ItemProcessor中查询的数量(输入文件中每行一个查询)是否会对偶尔可能发生的条件产生大量开销。您的选择将介于
之间