【发布时间】:2016-02-22 09:13:15
【问题描述】:
我目前正在编写 Spring Batch,我正在读取 XML 数据,对其进行处理,然后将处理器结果作为 map<string,object> 传递给 writer 并实现 CompositeItemWriter。以下是所需的输出 XML。
<Company att1="value">
<employees>
<employee></employee>
<employee></employee>
<employee></employee>
<employees>
</Company>
为编组和解组生成的 JAXB xjc 类。 JAXB 生成的类如下所示。
@XmlRootElement(name="Company")
public class Company{
@XmlElements(name="employees" required="true")
}
JAXB 员工类
@XmlRootElement(name="employees")
public class Employees
{
@XmlElement(name="Employee")
protected List<Employees> employee;
}
Spring XML 配置文件
<batch:job id="reportJob">
<batch:step id="step1">
<batch:tasklet>
<batch:chunk reader="xmlItemReader"
writer="compositeItemWriter" processor="filterReportProcessor"
commit-interval="2">
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
<!-- Filtering process -->
<bean id="filterReportProcessor" class="com.examples.FilterReportProcessor" />
<bean id="xmlItemReader"
class="org.springframework.batch.item.xml.StaxEventItemReader">
<property name="fragmentRootElementName" value="record" />
<property name="resource" value="classpath:xml/company.xml" />
<property name="unmarshaller" ref="reportUnmarshaller" />
</bean>
<!-- Read and map values to object, via jaxb2 -->
<bean id="reportUnmarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>com.examples.Company</value>
<value>com.examples.Employees</value>
<value>com.examples.Employee</value>
</list>
</property>
</bean>
<bean id="compositeItemWriter" class="org.springframework.batch.item.support.CompositeItemWriter">
<property name="delegates"/>
<list>
<ref bean="testXMlWriter">
</list>
</bean>
<bean id="testXMlWriter" class="com.test.example.TestXMLWriter">
处理器和写入器:
public class FilterReportProcessor
implement ItemProcessor<Employee,Map<String,Object>>{
public Map<String,Object> process(Employee emplpyee) throws Exception{
Map<String,Object> evnt = Mapper.crateMapping(emplpyee);
return event;
}
public class TestXMLWriter implemtes ItemWriter(Map<String,Object>){
write(List <? extends Map<String, object>> lst){
Employee e1 = new Employee();
e1.setxxx(mapelementdata.item());
Employees employs = new Employees();
employs.add(e1);
Comapany c1 = new Company();
c1.add(employs);
Marshaller m = context.createMarshaller();
m.marshal(c1, resource.getFile());
}
问题:
XML 文件覆盖每个固定的提交间隔,很明显 XML 文件在每个提交级别之后创建。但我必须将所有 <employee> 对象附加到同一个 XML 文件中。如何实现此逻辑以在每个提交间隔后附加 <employee> 对象?
【问题讨论】:
-
问题是什么?
-
如何在同一批处理步骤执行中追加新的 xml 记录。
-
修改问题并重新发布
标签: spring spring-batch