【发布时间】:2017-04-06 07:32:23
【问题描述】:
我需要实现一个批处理作业来拆分 XML、处理这些部分并在之后聚合它们。聚合需要进一步处理。
帐户部分的处理确实很昂贵。在下图中,处理部分对一个人的每个帐户执行操作(一个人的帐户数量会有所不同)。
示例输入文件:
<?xml version="1.0" encoding="UTF-8"?>
<Persons>
<Person>
<Name>Max Mustermann</Name>
<Accounts>
<Account>maxmustermann</Account>
<Account>esel</Account>
<Account>affe</Account>
</Accounts>
</Person>
<Person>
<Name>Petra Pux</Name>
<Accounts>
<Account>petty</Account>
<Account>petra</Account>
</Accounts>
</Person>
<Person>
<Name>Einsiedler Bob</Name>
<Accounts>
<Account>bob</Account>
</Accounts>
</Person>
</Persons>
对于每个人的每个帐户,请执行以下操作: 调用 REST 服务,例如
GET /account/{person}/{account}/logins
结果为每个包含聚合登录名的人员调用休息服务-xml:
POST /analysis/logins/{person}
<Person>
<Name>Max Mustermann</Name>
<Accounts>
<Account>
<LoginCount>22</LoginCount>
<Name>maxmustermann</Name>
</Account>
<Account>
<LoginCount>42</LoginCount>
<Name>esel</Name>
</Account>
<Account>
<LoginCount>13</LoginCount>
<Name>affe</Name>
</Account>
</Accounts>
</Person>
我对 API 没有任何影响,所以我需要更新人员包。
如何实现并行化并因此构建我的 spring 批处理应用程序?
我找到了一些起点,但没有一个是真正令人满意的。
我应该在一个步骤中处理帐户数据,返回属于每个帐户的项目并在下一步中轮询每个项目并聚合这些,还是应该在帐户步骤中实现并行化并聚合它在这一步里面,引入下一步进一步处理?
第一种方法的问题:我应该如何知道所有项目都已到达开始聚合?
第二种方法的问题(或者更确切地说是关于)的问题:手动实现并行化(例如 Java Futures)而不是将其留给 Spring Batch 是否常见?
Spring Batch 是什么样的方式?
谢谢,托马斯
【问题讨论】:
-
所以输出是xml?
-
嗨 Sabir,是的,它的 XML。
标签: spring spring-batch