2017-01-22 44 views
1

在我的JBeret Java批处理作业中,我需要将参数从一步传递到下一步。到目前为止,我只想通过JobContext.setTransientUserData()来做到这一点。Java-Batch:如何将数据从一个步骤传递到另一个步骤?

我的问题是: transientUserData方式是最佳实践方式还是有更好的选择? 在批处理步骤之间传递参数很常见,或者在这方面步骤应该是自给自足的?

回答

2

是的,作业上下文瞬态用户数据是在批处理规范(JSR 352)定义的步骤之间传递应用程序数据的标准机制。这种用法是可移植的,适用于所有兼容的实现。

大部分步骤是独立的,但步骤也在工作中生活。因此,一步导出或使用来自另一步骤的应用程序数据以协调作业执行是很常见的。

在JBeret中,您可以声明CDI bean为@JobScoped,并将其注入需要访问共享应用程序状态的位置。

查看此JBeret test用于示例用法。

类似计算器的讨论: How to put in custom scope/context (JobScoped - custom CDI scope) particular instance from request to make it injectable?

+0

非常感谢您对这个答案!我认为关于批处理步骤和通过setTransientUserData()传递值相同。我忽略了@JobScoped注释。这是我会这样做的方式。注入bean看起来更简洁,更容易,而不是将它作为JobContext中的transientUserData传递。并感谢您与其他讨论的链接。当我搜索时我没有发现。 – uwl