【问题标题】:Java-Batch: How to pass data from one step to another step?Java-Batch:如何将数据从一个步骤传递到另一个步骤?
【发布时间】:2017-01-22 01:10:35
【问题描述】:

在我的 JBeret java-batch 作业中,我需要将参数从一个步骤传递到下一步。到目前为止,我只是想通过 JobContext.setTransientUserData() 来做到这一点。

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

【问题讨论】:

    标签: java jakarta-ee java-batch jberet


    【解决方案1】:

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

    步骤在大多数情况下是独立的,但步骤也存在于作业中。因此,一个步骤从另一个步骤导出或使用应用程序数据以协调作业执行是很常见的。

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

    查看此JBeret test 的用法示例。

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

    【讨论】:

    • 非常感谢您的回答!我对批处理步骤和通过 setTransientUserData() 传递值也有同样的想法。我忽略了@JobScoped 注释。这就是我要做的方式。注入 bean 似乎比在 JobContext 中将它作为 transientUserData 传递更干净、更容易。感谢您提供其他讨论的链接。我搜索的时候没有找到。
    • 我读到了关于瞬态/持久用户数据的文章,并且喜欢这个概念。通过属性简单地将信息存储在作业或步骤上下文中来传递信息是否也不可行?
    猜你喜欢
    • 1970-01-01
    • 2022-11-22
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 2019-10-27
    相关资源
    最近更新 更多