gpt4 book ai didi

java-ee-7 - JEE 7 JSR 352 将数据从批处理传递到 block 步骤

转载 作者:行者123 更新时间:2023-12-02 22:23:13 25 4
gpt4 key购买 nike

我已阅读标准(和 javadoc),但仍有一些问题。我的用例很简单:批处理从外部源获取数据并确认该数据(意味着确认后数据将从外部源删除)。在确认数据之前,batchlet 会生成相关输出(内存对象中),该输出将传递到下一个面向 block 的步骤。

问题:

1) 在批量和 block 步骤之间传递数据的最佳实践是什么?看来我可以通过调用 jobContext#setTransientUserData 来做到这一点在批处理中,然后在我的 block 步骤中,我可以通过调用来访问该数据jobContext#getTransientUserData。

据我所知,jobContext和stepContext都是以线程本地方式实现的。让我担心的是“ transient ”部分。如果batchlet成功但我的chunk-step失败会发生什么?如果作业/步骤重新启动,“TransientUserData”数据仍然可用还是会消失?对于我的用例,重要的是该批处理仅运行一次。因此,即使作业或 block 步骤重新启动,保留成功运行的批处理程序的输出数据也很重要 - 否则必须再次启动批处理程序。 (我已经确认了数据,但它已经消失了 - 因此再次运行该批处理对我没有帮助。)

2) 跟进问题在stepContext中有几个方法:getPersistentUserData和setPersistentUserData。这些方法的预期用途是什么?“持久”部分指的是什么?这些方法仅与分区相关吗?

谢谢!/丹尼尔

最佳答案

临时用户数据只是临时的,在作业重新启动期间将不可用。作业重新启动可能发生在不同的进程或计算机中,因此用户不能指望上次运行的作业 transient 在重新启动时可用。

步骤持久用户数据是批处理作业开发人员认为为了重新启动、监视或审核而需要保存/保留的那些应用程序数据。它们将在重新启动时可用,但通常仅限于当前步骤(而不是跨步骤)。

通过阅读您的简短描述,我感觉您的两个步骤耦合得太紧密,您几乎可以将它们视为一个工作单元。您希望它们要么都成功,要么都失败,以保持应用程序状态的完整性。我认为这可能是问题的根源。

关于java-ee-7 - JEE 7 JSR 352 将数据从批处理传递到 block 步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49210613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com