如何在 Spring 批处理中将多个记录类型写入单个平面文件

How to write multiple record types to a single flat file in Spring Batch

我有一个包含多种元素类型的 xml。下面是一个简单的 xml 原型。 实际xml有更多的元素类型。

<company>
    <FileHeader>
        <fh_custId>Id</fh_custId>
        <fh_custName>Name</fh_custName>
        <fh_custAge>Age</fh_custAge>
        <fh_dob>DOB</fh_dob>
        <fh_income>Income</fh_income>
    </FileHeader>
    <record refId="1001">
        <name>John</name>
        <age>31</age>
        <dob>31/8/1982</dob>
        <income>200,000</income>
    </record>
</company>

我正在使用 StaxEventItemReader 和 JAXB2Marshaller 来读取 xml。我想写入一个固定大小的平面文件。具有以下设置的 FlatFileItemWriter 只能处理一种元素类型 - (在本例中为 "record" 元素)。 我如何配置其他元​​素类型。比如上面的"FileHeader"元素xml.

<property name="lineAggregator">
            <bean
                class="org.springframework.batch.item.file.transform.FormatterLineAggregator">
                <property name="fieldExtractor">
                    <bean
                        class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                        <property name="names" value="refId, name, age, csvDob, income" />
                    </bean>
                </property>
                <property name="format" value="%-6.6s%-15.15s%-4.4s%-12.12s%-10.10s%"/>
            </bean>
        </property>

我认为您可以使用自定义 LineAggregator combined with a Classifier 来发送到正确的线路聚合器。