我正在尝试使用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填充数据字段。
我已经构建了一个可以完成工作的应用程序,但是我仍然想问一些问题
这是使应用程序正常运行的代码
@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类中吗?
答案 0 :(得分:1)
我的Reader,mapper,marcheller和writer的配置是否正确?这是我第一次尝试EasyBatch。
是的,您的配置正确。
我们需要在这里设置mapper和marshaller吗?我想是的,只是为了确保。并会影响性能
不,这些不是必需的。但是最好将原始xml输入映射到域对象,以便操作对象而不是字符串。根据性能,这取决于您的xml编组库。
EasyBatch中有XmlWriter吗?
不。有一个FileRecordWriter
,它接受一个字符串(不知道其格式)并将其写入文件。您可以使用RecordMarshaller
将字符串预先编组为JSON,XML,CSV等。
我们是否可以用特定类型配置处理器?目前,我必须从Payload到Pojo,如果我们有很多条目,
是的。 Record
和RecordProcessor
API是通用的。
我们可以将Spring Bean集成到Processor类中吗?
是的,请看看这个FAQ