Java 如何在一次作业执行中停止spring编写器
我使用SpringBatch每5分钟将数据从redis导入DB,下面是我的工作 我编写了一个redis阅读器,使用redis.keys命令一次性读入我想要的所有密钥,然后将这些密钥传输到jdbc编写器 问题是,一旦作业启动,读取器将连续运行,但我只希望在一次批处理作业运行中执行redis.keys命令一次。 有人知道如何做到这一点吗Java 如何在一次作业执行中停止spring编写器,java,spring,spring-batch,Java,Spring,Spring Batch,我使用SpringBatch每5分钟将数据从redis导入DB,下面是我的工作 我编写了一个redis阅读器,使用redis.keys命令一次性读入我想要的所有密钥,然后将这些密钥传输到jdbc编写器 问题是,一旦作业启动,读取器将连续运行,但我只希望在一次批处理作业运行中执行redis.keys命令一次。 有人知道如何做到这一点吗 更新thx@Michael Minella 我实现了ItemStreamReader接口,其中的open()方法在作业步骤开始之前只执行一次。此外,我还实现了It
更新thx@Michael Minella 我实现了ItemStreamReader接口,其中的open()方法在作业步骤开始之前只执行一次。此外,我还实现了ItemListenerSupport接口,每次在read()方法之后都会执行afterRead()方法。因此,在open()方法中,我从redis检索数据,将其放入映射中,在read()中返回映射,并在afterRead()中将映射设置为null。因此,下次执行read()时,它将返回null,这表示作业将完成。
但这有点棘手,可能spring batch可以添加一个在每个作业实例中只运行一次的读卡器接口。spring batch
ItemReaders
和ItemWriter
还可以扩展一个名为ItemStream
的附加接口。此接口提供了一些对该场景有用的其他生命周期方法。在您的情况下,我建议在ItemStream.open
方法中进行实际读取。在步骤开始时调用一次。然后,在ItemReader.read
方法中,可以迭代查询结果。Spring批处理提供了许多使用此技术的ItemReader
实现。一个例子是JdbcCursorItemReader
who的源代码可以在这里找到: