java - 步骤链接的说明

标签 java spring spring-batch batch-processing

由于对Spring Batch中的Step Chaining众说纷纭,根据用例不同,我想知道最常识是什么:

Chaining of Steps,即一个 Job 有一个 Step 流,其中每个 Step 都有 Reader、Processer 和 Writer。使用 Job ExecutionContext 交换步骤之间的数据。

ItemProcessors 链,即一个作业只有一个步骤,但有一个 ItemProcessors 流。

我认为第一种可能性更合理,因为名称“Job”意味着有几个步骤可以完成它。在许多用例中的缺点可能是,在步骤的开始和结束时会有冗余或有时是“空”的读写。 第二种是最常见的解决方案,但我认为这种“一步”解决方案并不完全是批处理的目的。

你对此有何看法?

最佳答案

ItemProcessors 的用处非常有限,它们最适用于你想要转换你读入的每个项目的情况。你可以使用它们来过滤掉你不想要的行,但在某些情况下(当你的读者执行一个 SQL 查询)很快就会变得浪费,如果你能避免首先阅读这些行,它会更有效率。

在过程中有一个钩子(Hook)能够放入 ItemProcessors 很好,但我不会过度使用它。大多数非平凡的工作似乎有多个步骤,框架为错误处理、分块、分区等步骤提供支持,其中 ItemProcessors 与步骤相比非常轻量级,框架不提供任何支持在工作流程中为他们提供一席之地。

(声明“使用作业执行上下文交换步骤之间的数据”似乎有问题。我用它来保存读取或写入的行数之类的东西。它不是放置任何比它大得多的东西的好地方那个。)

关于java - 步骤链接的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40723049/

相关文章:

java - 我正在尝试将 mysql 查询结果打印到 jLabel 中

java - 在没有 <mvc :resources/> tag 的情况下在 Freemarker 中使用 CSS 样式文件

java - 升级到 Java 7 后 Spring (3.2.0) ConfigurationClassEnhancer 中出现 Stackoverflow 错误

spring-batch - 无法将类型 'java.util.Collections$UnmodifiableMap' 的属性值转换为所需类型 'org.springframework.batch.item.ExecutionContext'

java - 使用 Tasklet 在 Spring Batch 中或在 CompositeItemWriter 中创建逻辑?

java - Spring Batch 状态更改查询

java - 将目标节点作为字符串传递给代理参数

java - setOnClickListener 导致 "RuntimeException: Unable to start"- NullPointerException

java - KIE Drools Workbench 无法解决 Maven 依赖关系

Spring + PostgreSQL > 多个 SLF4J 绑定(bind)