statxeventitemwriter,用于输出带有头的大xml文件

c90pui9n  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(267)

我需要将一些旧的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,然后我就可以为每个输出文件添加头文件了,对吗?

mm5n2pyu

mm5n2pyu1#

您可以使用将 StaxEventItemWriter . 要限制每个文件的元素数,可以设置 itemCountLimitPerResource 参数设置为5000。
对于头文件,需要创建一个单独的步骤,从文件中动态提取头文件并将其传递给委托编写器。我在这里与一个平面文件编写器共享了一个示例,但是您可以将其改编为xml编写器。

相关问题