使Spring Batch ItemReader可重新启动

时间:2019-01-16 22:57:46

标签: spring-batch

我正在处理的spring Batch程序正在从表中读取数据。它使用的是“ org.springframework.batch.item.database.JdbcCursorItemReader” itemReader。先前的计划是更改表,并添加PROCESSED_INDICATOR标志,并以状态“ PENDING”预填充它。处理完记录后,编写者将把PROCESSED_INDICATOR标志的状态更新为“已处理”。这是为了支持可重启性。例如,如果批处理拾取了100万条记录,而在½万条记录中死亡,那么当我重新启动该批处理时;它应该从我离开的地方开始。 但不幸的是,管理层没有批准该解决方案。我正在研究使itemreader可重新启动的方法。根据Spring文档,“大多数ItemReader具有更复杂的重启逻辑。例如,JdbcCursorItemReader将最后处理的行的行ID存储在Cursor中。”

是否有人具有实现JdbcCursorItemReader并将自定义最后读取的行存储在游标中的自定义阅读器的任何示例示例。 https://docs.spring.io/spring-batch/trunk/reference/html/readersAndWriters.html

==完整的XML配置==

MyExternalFunction(numOfLines)  {
    return new Promise(function (resolve, reject) {
        var totalNumToAck = 0;

        for (var i = 0; i < numOfLines; ++i) {
            //code to analyze the page      
            if (somecondition) {
                totalNumToAck++;
            }
        }
        console.log('found' + totalNumToAck + 'elements');
        resolve(totalNumToAck);
    })
};

1 个答案:

答案 0 :(得分:0)

  

任何人都有这样的自定义阅读器的示例示例,该示例实现JdbcCursorItemReader并将最后处理的行存储在游标中

JdbcCursorItemReader就是这样做的,请参见Javadoc,这是节选:

ExecutionContext: The current row is returned as restart data,
and when restored from that same data, the cursor is opened and the current row
set to the value within the restart data.

因此您不需要自定义阅读器。