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