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

时间:2019-02-22 14:04:51

标签: java easy-batch

我正在尝试使用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类中吗?

1 个答案:

答案 0 :(得分:1)

  

我的Reader,mapper,marcheller和writer的配置是否正确?这是我第一次尝试EasyBatch。

是的,您的配置正确。

  

我们需要在这里设置mapper和marshaller吗?我想是的,只是为了确保。并会影响性能

不,这些不是必需的。但是最好将原始xml输入映射到域对象,以便操作对象而不是字符串。根据性能,这取决于您的xml编组库。

  

EasyBatch中有XmlWriter吗?

不。有一个FileRecordWriter,它接受​​一个字符串(不知道其格式)并将其写入文件。您可以使用RecordMarshaller将字符串预先编组为JSON,XML,CSV等。

  

我们是否可以用特定类型配置处理器?目前,我必须从Payload到Pojo,如果我们有很多条目,

是的。 RecordRecordProcessor API是通用的。

  

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

是的,请看看这个FAQ