我的应用程序只需要修复没有要读取的记录 &安培;处理。如果我使用的是flatfileItemReader,如何限制它? 在基于DB的Item Reader中,当达到max_limit时,我返回null /空列表。 如果我使用的是org.springframework.batch.item.file.FlatFileItemReader,如何实现相同的目标?
答案 0 :(得分:5)
对于FlatFileItemReader
以及扩展ItemReader
的任何其他AbstractItemCountingItemStreamItemReader
,都有一个maxItemCount
属性。通过配置此属性,ItemReader
将继续读取,直到满足以下任一条件:
maxItemCount
。在上述两种情况中的任何一种情况下,读者都会返回null,向Spring Batch表明输入已完成。
如果您有任何需要满足此要求的自定义ItemReader
实施,我建议您延长AbstractItemCountingItemStreamItemReader
并从那里开始。
答案 1 :(得分:3)
最好的方法是编写一个代表,负责跟踪读取记录的数量,并在固定计数后停止;组件应该处理执行上下文以允许可重新启动
class CountMaxReader<T> implements ItemReader<T>,ItemStream
{
private int count = 0;
private int max = 0;
private ItemReader<T> delegate;
T read() {
T next = null;
if(count < max) {
next = delegate.read();
++count;
}
return next;
}
void open(ExecutionContext executionContext) {
((ItemStream)delegate).open(executionContext);
count = executionContext.getInt('count', 0);
}
void close() {
((ItemStream)delegate).close(executionContext);
}
void update(ExecutionContext executionContext) {
((ItemStream)delegate).update(executionContext);
executionContext.putInt('count', count);
}
}
这适用于任何读者。
答案 2 :(得分:1)
public class CountMaxFlatFileItemReader extends FlatFileItemReader {
private int counter;
private int maxCount;
public void setMaxCount(int maxCount) {
this.maxCount = maxCount;
}
@Override
public Object read() throws Exception {
counter++;
if (counter >= maxCount) {
return null; // this will stop reading
}
return super.read();
}
}
这样的事情应该有效。只要返回null,阅读器就会停止阅读。