如何在 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
来发送到正确的线路聚合器。
我有一个包含多种元素类型的 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
来发送到正确的线路聚合器。