【发布时间】:2018-03-10 15:13:12
【问题描述】:
我已阅读标准(和 javadoc),但仍有一些问题。 我的用例很简单: batchlet 从外部源获取数据并确认数据(意味着确认后数据从外部源中删除)。 在确认数据之前,batchlet 会产生相关的输出(in-menory-object),这些输出将被传递到下一个面向块的步骤。
问题:
1) 在批处理和块步骤之间传递数据的最佳实践是什么? 看来我可以通过调用 jobContext#setTransientUserData 来做到这一点 在批处理中,然后在我的块步骤中,我可以通过调用访问该数据 jobContext#getTransientUserData。
我了解 jobContext 和 stepContext 都是以线程本地方式实现的。 这里让我担心的是“瞬态”部分。 如果批处理成功但我的块步骤失败会发生什么? 如果重新启动作业/步骤,“TransientUserData”-数据是否仍然可用? 对于我的用例,批处理只运行一次很重要。 因此,即使重新启动作业或块步骤,保留成功运行批处理的输出数据也很重要 - 否则批处理必须再次保存。 (我已经确认了数据并且它已经消失了 - 所以再次运行 batchlet 对我没有帮助。)
2) 跟进问题 在 stepContext 中有几个方法:getPersistentUserData 和 setPersistentUserData。 这些方法的预期用途是什么? “持久”部分指的是什么? 这些方法是否仅与分区相关?
谢谢! /丹尼尔
【问题讨论】: