gpt4 book ai didi

java - 如何在一项作业执行中停止 Spring 编写器

转载 作者:行者123 更新时间:2023-12-01 12:30:21 25 4
gpt4 key购买 nike

我使用 Spring Batch 每 5 分钟将数据从 Redis 导入到数据库,这就是我所做的。

我写了一个redis阅读器,使用redis.keys命令一次性读取我想要的所有 key ,然后将这些 key 传输给jdbc编写器。

问题是,一旦作业启动,读取器将连续运行,但我只想在一批作业运行中执行一次 redis.keys 命令。有谁知道如何实现这一目标吗?

<小时/>

更新谢谢@Michael Minella我实现了 ItemStreamReader 接口(interface),其中 open() 方法将在作业步骤开始之前仅执行一次。另外,我还实现了ItemListenerSupport接口(interface),每次read()方法之后都会执行该接口(interface)的afterRead()方法。因此,在 open() 方法中,我从 redis 检索数据,将其放入映射中,在 read() 中返回映射,并在 afterRead() 中将映射设置为 null。因此,下次执行 read() 时,它将返回 null,这表明作业将完成。但这有点棘手,也许 spring-batch 可以添加一个在每个作业实例中仅运行一次的 Reader Interface。

最佳答案

Spring Batch ItemReadersItemWriters 还可以扩展一个名为 ItemStream 的附加接口(interface)。该接口(interface)提供了一些对此场景有用的附加生命周期方法。对于您的情况,我建议在 ItemStream.open 方法中进行实际读取。这在步骤开始时调用一次。然后,在 ItemReader.read 方法中,您可以迭代查询结果。 Spring Batch 提供了许多使用此技术的 ItemReader 实现。一个示例是 JdbcCursorItemReader,其源代码可以在此处找到: https://github.com/spring-projects/spring-batch/blob/master/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcCursorItemReader.java

关于java - 如何在一项作业执行中停止 Spring 编写器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25965705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com