当前位置: 首页 > 知识库问答 >
问题:

Spring批处理中Step、Tasklet和Chunk之间的差异[已关闭]

龙俊良
2023-03-14

spring batch中的Step、Tasklet和Chunk之间有什么区别。?

此外,如何通过Spring Batch并行执行步骤。?

共有1个答案

惠洛华
2023-03-14

这其实是个好问题。下面是一个配置示例:

<job id="sampleJob" job-repository="jobRepository">
    <step id="step1" next="step2">
        <tasklet transaction-manager="transactionManager">
            <chunk reader="itemReader" writer="itemWriter" commit-interval="10"/>
        </tasklet>
    </step>
    <step id="step2">
         <tasklet ref="myTasklet"/>
    </step>
</job>

你有一个工作,这个工作是由步骤组成的。大多数时候,这些步骤是连续的。你定义你的工作必须以步骤的顺序完成:你做第1步,然后是第2步,然后是第3步,如果第3步失败,你可以做第4步,或者直接进入第5步,等等。

步骤中完成的事情由一个任务小程序表示,它们执行任务。

在spring batch中,您将主要使用读卡器、处理器和编写器进行面向块的处理。根据官方文件:

面向块的处理是指一次读取一个数据,并在事务边界内创建将被写入的“块”

但是您可以制作自己的tasklet,并在您的步骤中设置它。例如,执行SQL查询的tasklet。(此处示例:在Spring批处理中删除表的Tasklet)

因此,这些步骤在作业中是有序的,每个步骤都包含一个tasklet,它执行一项任务。其中一个tasklet(可能是最常用的一个)是面向块的处理tasklet。

如果你好奇,这是ChunkOrientedTasklet的医生。如您所见,它实现了Tasklet接口。

有关更多信息:http://docs.spring.io/spring-batch/reference/html/configureStep.html

是的,spring batch非常适合并行处理,使用流程:http://docs.spring.io/spring-batch/reference/html/scalability.html

 类似资料:
  • 我有一个非常简单的spring批处理,它从一个表中更新了一百万条记录。因为它非常简单,所以我尝试只实现一个更新表的Tasklet。 但我想用10个记录的步骤来promise。是可以在tasklet中实现这一点,还是我必须将itemReader/ItemWriter与块一起使用? 提前谢谢。

  • Spring批处理读取器的“pageSize”属性和写入器的“提交间隔”之间有什么关系/区别。 我可能错了,但我在我的应用程序中看到了一种模式,即每超过一个页面大小,我就会看到一个提交。这是真的吗? 谢谢

  • 我目前正在构建一个spring批处理应用程序,其中执行了几个步骤。除了一个,所有的步骤都是简单的tasklet(没有读取器或写入器),它们负责各种任务,如复制文件、发送请求、启动批处理(*.bat)文件等。 大多数步骤应该是串行执行的。在一个特定的步骤中,我希望启动X文件,这些文件最多可以有Y个实例。 null 如果:)我想我必须使用taskExecutor,下面我有一个示例,在这里我开始第一步(

  • 我使用FlatFileItemReader创建了一个spring批处理作业,它从一个分隔文件中读取数据,然后使用JdbcBatchItemWriter写入DB。我的setp配置如下所示。 上面的配置是为每100行打开单独的事务,因此,如果在完成tasklet(步骤1)之前发生故障,则我无法恢复之前提交的行。有没有办法在一个事务中运行整个tasklet?。 另外:我使用MapJobRepositor

  • 我在没有ItemWriter的情况下定义了我的tasklet,如下所示: 我得到了这个错误: 配置问题:

  • 我有一个Spring批处理tasklet,我不知道如何从中失败。我想检查某些参数,如果它们不存在,则在该步骤中使作业失败。 注释掉的行是我试图让工作退出的行。有人有过这样的经历吗?