繁体   English   中英

具有Xml Reader,Xml Writer和处理器的EasyBatch

[英]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,如果我们有很多条目,

是。 RecordRecordProcessor API是通用的。

我们可以将Spring Bean集成到Processor类中吗?

是的,请查看此常见问题解答

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM