我需要将一些旧的java批处理迁移到spring批处理。这些旧的批处理读取大的xml文件(>1gb)并将它们拆分为小的xml文件。所以我们有以下场景:
输入:big1file.xml->输出:small1.1file.xml、small1.2file.xml、small1.3file.xml
输入:big2file.xml->输出:small2.1file.xml,small2.2file.xml
输入:big3file.xml->输出:small3.1file.xml、small3.2file.xml、small3.3file.xml、small3.4file.xml
此xml文件的结构始终相同:
<?xml version="1.0"?>
<info>
<header>
<headerField1></headerField1>
<headerField2></headerField2>
</header>
<elements>
<element>
<elementField1></elementField1>
<elementField2></elementField2>
<elementField3></elementField3>
</element>
<element>
<elementField1></elementField1>
<elementField2></elementField2>
<elementField3></elementField3>
</element>
<element>
<elementField1></elementField1>
<elementField2></elementField2>
<elementField3></elementField3>
</element>
<element>
<elementField1></elementField1>
<elementField2></elementField2>
<elementField3></elementField3>
</element>
....
</elements>
</info>
我一直在阅读有关stateVentitemReader和stateVentitemWriter的文档和示例,我不确定是否可以使用writer的默认版本。
statexEventItem类是分割这类xml文件的好选择吗?
通常,示例是没有标题元素的xml,基本上是带有元素列表的xml:
<?xml version="1.0"?>
<info>
<elements>
<element>
<elementField1></elementField1>
<elementField2></elementField2>
<elementField3></elementField3>
</element>
<element>
<elementField1></elementField1>
<elementField2></elementField2>
<elementField3></elementField3>
</element>
<element>
<elementField1></elementField1>
<elementField2></elementField2>
<elementField3></elementField3>
</element>
<element>
<elementField1></elementField1>
<elementField2></elementField2>
<elementField3></elementField3>
</element>
....
</elements>
</info>
如果我没有错的话,我需要做的是扩展statxeventitemwriter,然后我就可以为每个输出文件添加头文件了,对吗?
1条答案
按热度按时间mm5n2pyu1#
您可以使用将
StaxEventItemWriter
. 要限制每个文件的元素数,可以设置itemCountLimitPerResource
参数设置为5000。对于头文件,需要创建一个单独的步骤,从文件中动态提取头文件并将其传递给委托编写器。我在这里与一个平面文件编写器共享了一个示例,但是您可以将其改编为xml编写器。