跨Spring Batch步骤

时间:2015-08-21 13:51:41

标签: java spring spring-batch batch-processing

目前我正在编写一个批处理,它从几个源平面文件,DB中获取数据并将其推送到NoSQL。我在移动集合数据时遇到了挑战,尤其是HashMap,如果从数据库中获取并将字段的元数据存储在平面文件中,那么它就是特定用户的元数据。在平面文件中,我们有每日生成的数据,我们每30分钟扫描一次并将其推送到NoSQL。我想将数据库中的一个字段合并到我们推入NoSQL的实体中。 我们正在尝试的当前方法是,在第一步中获取用户列表并将它们写入平面文件。然后使用此平面文件作为步骤2的输入,从数据库中获取数据并生成HashMap,我将其序列化并将其存储到平面文件中。然后在我们将数据推送到NoSQL的步骤中,我再次对此Hashmap进行反序列化并在该步骤中使用它。我不确定这种方法在重载时的性能,因为我们必须满足30分钟的SLA。 你们可以建议是否有任何其他方法来实现这种情况。根据Docs,我们在Spring Batch中的StepContext或JobContext中拥有如此庞大的数据并不好。 任何建议都是最受欢迎的。谢谢。如果需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

Spring Batch提供了pass data from step to step

的方法

将其存储在步骤上下文中:

ExecutionContext stepContext = this.stepExecution.getExecutionContext();
stepContext.put("someKey", someObject);

将其推广到工作环境:

<!-- add this as a listener in the step above -->
<beans:bean id="promotionListener" class="org.spr....ExecutionContextPromotionListener">
    <beans:property name="keys" value="someKey"/>
</beans:bean>

在下一步中检索作业执行:

JobExecution jobExecution = stepExecution.getJobExecution();
ExecutionContext jobContext = jobExecution.getExecutionContext();
this.someObject = jobContext.get("someKey");