[英]EasyBatch with Xml Reader, Xml Writer and processor
我正在尝试使用EasyBatch而不是Spring批处理,以查看是否可以消除一些开销。 我有用例
输入文件
<?xml version="1.0" encoding="utf-8"?>
<GroupRuleOutputs>
<GroupRuleOutput doc_id="str1234" copy_num="str1234" copy_id="str1234">
<GroupRule>
<ReturnCode>123</ReturnCode>
<Data></Data>
</GroupRule>
</GroupRuleOutput>
<GroupRuleOutput doc_id="str1234" copy_num="str1234" copy_id="str1234">
<GroupRule>
<ReturnCode>ABC</ReturnCode>
<Data></Data>
</GroupRule>
</GroupRuleOutput>
</GroupRuleOutputs>
预期产量
<?xml version="1.0" encoding="utf-8"?>
<GroupRuleOutputs>
<GroupRuleOutput doc_id="str1234" copy_num="str1234" copy_id="str1234">
<GroupRule>
<ReturnCode>123</ReturnCode>
<Data>123 from API</Data>
</GroupRule>
</GroupRuleOutput>
<GroupRuleOutput doc_id="str1234" copy_num="str1234" copy_id="str1234">
<GroupRule>
<ReturnCode>ABC</ReturnCode>
<Data>ABC from API</Data>
</GroupRule>
</GroupRuleOutput>
</GroupRuleOutputs>
我们需要通过调用API来基于ReturnCode填充Data字段。
我已经构建了一个可以完成这项工作的应用程序,但是仍然有一些我想问的问题
这是使应用程序正常运行的代码
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="GroupRuleOutput")
public class GroupRuleOutput {
@XmlElement(name="GroupRule")
private GroupRule groupRule;
}
File groupRuleOutputFile = new File("c:\\work\\temp\\sample.xml");
File mergedGroupRuleOutputFile = new File("c:\\work\\temp\\output.xml");
Job job = JobBuilder.aNewJob()
.reader(new XmlFileRecordReader(groupRuleOutputFile, "GroupRuleOutput"))
.mapper(new XmlRecordMapper(GroupRuleOutput.class))
.processor(new GroupRuleOutputMergeProcessor())
.marshaller(new XmlRecordMarshaller(GroupRuleOutput.class))
.writer(new FileRecordWriter(new FileWriter(mergedGroupRuleOutputFile)))
.build();
JobExecutor jobExecutor = new JobExecutor();
jobExecutor.execute(job);
jobExecutor.shutdown();
public class GroupRuleOutputMergeProcessor implements RecordProcessor {
@Override
public Record processRecord(Record record) throws Exception {
GroupRuleOutput groupRuleOutput = (GroupRuleOutput)record.getPayload();
groupRuleOutput.getGroupRule().setReturnCode("I change " + groupRuleOutput.getGroupRule().getReturnCode());
return record;
}
}
这是我的问题
我的Reader,mapper,marcheller和writer的配置是否正确? 这是我第一次尝试EasyBatch。
我们需要在这里设置mapper和marshaller吗? 我想是的,只是为了确保。 并影响性能吗
EasyBatch中有XmlWriter吗?
我们是否可以用特定类型配置处理器? 目前,我必须从Payload到Pojo,如果我们有很多条目,
我们可以将Spring Bean集成到Processor类中吗?
我的Reader,mapper,marcheller和writer的配置是否正确? 这是我第一次尝试EasyBatch。
是的,您的配置正确。
我们需要在这里设置mapper和marshaller吗? 我想是的,只是为了确保。 并影响性能吗
不,那些不是必需的。 但是最好将原始xml输入映射到域对象,以便操作对象而不是字符串。 根据性能,这将取决于您的xml编组库。
EasyBatch中有XmlWriter吗?
不。有一个FileRecordWriter
,它接受一个字符串(不知道其格式)并将其写入文件。 您可以使用RecordMarshaller
将字符串预先RecordMarshaller
为JSON,XML,CSV等。
我们是否可以用特定类型配置处理器? 目前,我必须从Payload到Pojo,如果我们有很多条目,
是。 Record
和RecordProcessor
API是通用的。
我们可以将Spring Bean集成到Processor类中吗?
是的,请查看此常见问题解答
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.