Spring batch Spring批处理暂停,然后继续

Spring batch Spring批处理暂停,然后继续,spring-batch,Spring Batch,我正在编写一个作业,它将从excel文件中读取x行数,然后我希望它暂停一个小时,然后继续执行下一个x行数。 我该怎么做 我有一个job.xml文件,其中包含以下内容。subscriptionDiscoverer获取文件并将其传递给处理器。处理器完成后,subscriptionWriter应写入另一个文件 <job id="subscriptionJob" xmlns="http://www.springframework.org/schema/batch" incrementer="job

我正在编写一个作业,它将从excel文件中读取x行数,然后我希望它暂停一个小时,然后继续执行下一个x行数。 我该怎么做

我有一个job.xml文件,其中包含以下内容。subscriptionDiscoverer获取文件并将其传递给处理器。处理器完成后,subscriptionWriter应写入另一个文件

<job id="subscriptionJob" xmlns="http://www.springframework.org/schema/batch" incrementer="jobParamsIncrementer">
    <validator ref="jobParamsValidator"/>
    <step id="readFile">
        <tasklet>
            <chunk reader="subscriptionDiscoverer" processor="subscriptionProcessor" writer="subscriptionWriter" commit-interval="1"  />
        </tasklet>
    </step>
</job>

是否有某种计时器可以使用,或者是某种流结构?这是一个大约160000行的大文件,需要处理

我希望有人有他们想分享的解决方案。
谢谢大家!

我想从两种可能的方法开始:

  • 停止作业,然后在最后一个位置重新启动(一小时后)。您可以从查看如何更改BatchStatus以通知您停止作业的意图开始。请参阅或了解Spring Batch Admin如何实现其暂停标志()的通信方式。您可能需要实现一些持久性来存储作业的位置(行号),以便知道从何处再次开始处理。您还可以使用调度程序重新启动作业 -或-

  • 添加一个并在afterChunk(ChunkContext上下文)中实现以下内容:检查到目前为止是否读取了x行数,如果是,则实现暂停机制(例如,一个简单的Thread.sleep或寻找更一致的暂停步骤的方法)。要检查读取的行数,可以使用from ChunkContext.getStepContext().StepExecution() 请注意,afterChunk在事务外部调用,如javadoc中所示:

    执行区块后,在事务外部回调


    为了理解这个问题,您需要处理预定义数量的记录(x),等待预定义的时间(y),然后处理下一块x,然后重复?是!重复此操作,直到文件结束。我不太擅长这个,但也许我可以添加一个暂停y分钟的步骤,然后重复readFile步骤?那么,如何计算文件中的最后一个位置?我只是不知道该怎么做?我创建了一个文件发现程序,一个从文件中读取信息的处理器和一个从第一个文件中写入信息的写入程序。我想我做错了。因为处理器从文件中读取2行,而写入程序只写入最后一行。。。所以我想我需要一个真正的读卡器,读一行,把它发送给处理器,处理器处理它,把它发送给写卡器?我仍然需要有关暂停和恢复步骤的帮助,我仍然不知道如何执行此操作。选项2可能导致事务超时,因为在事务中为ChunkThank@MichaelPralow调用BeforeCunk之前。您是对的,因为beforeChunk的javadoc表明“在执行块之前回调,但在事务内部。”我编辑了我的答案,将其替换为afterChunk