spring - Spring batch - 项目阅读器知道阅读器处理的最后一条记录
问题描述
ItemReader
每次作业运行时都会从不断增长的现有表中读取。我正在寻找 Spring 批处理中的选项,以便在每次调度作业运行时仅查询新记录。
如果我读取了 50000 条记录,则下一个计划应从 50001 开始。
我的想法是将 ItemReader 读取的最后一条记录的 id (整个阅读器输出的最后一个,而不是每个块的最后一个)保存在 DB 中,并在后续的作业计划中使用。我将从主表返回按 id 排序的数据。
我怎么知道作者的最后一条记录?有任何想法吗。
解决方案
我会通过在运行批处理作业时传递需要作为作业参数处理的记录的 ID 范围(即fromId
和)来明确说明。toId
然后在 中ItemReader
,就可以依靠这个 ID 范围返回数据进行处理了。
并以某种方式将已处理的最新 ID 保存到数据库中(例如,JobExecutionListener
在作业完成时使用)。当下一个调度作业触发时,找出下一个没有被处理的ID,然后以这个下一个ID作为参数启动另一个作业实例。
推荐阅读
- python - python 正则表达式 - ConnectionProfile:Database:MSSQL
- svn - 如何在存储库中保留“忽略”的文件?
- python - 如何为其值是包含不同类型的单个值的列表的字典构造棉花糖模式?
- mysql - 我的不和谐机器人上的数据库(Discord.js + mysql)
- sql - 您可以使用连接来创建包含缺失值的表吗?
- android - 当应用程序关闭或手机处于打盹模式时在android中执行后台任务
- snowflake-cloud-data-platform - 相同的同时查询和缓存
- c++ - 如何使用 LLVM/Clang 插入模板特化?
- unity3d - 在不加入频道的情况下在 Unity 中播放音频效果?
- swift - 如何使不同 DynamoDB 表中的数据相互关联?