Spring Batch:自定义ItemReader

时间:2015-06-17 12:23:01

标签: java spring spring-batch

我有一个Spring Batch项目,带有一个简单的自定义阅读器和编写器。当我运行代码时,我最终以一个不经意的循环打印第一个项目"项目1"。我究竟做错了什么?

这是我的代码:

Reader.java

public class Reader implements ItemReader<SimpleItem> {


public SimpleItem read() throws Exception, UnexpectedInputException, ParseException {
    if (getIterator().hasNext()) {
        return getIterator().next();
    }
    return null;
}

public Iterator<SimpleItem> getIterator() {
    List<SimpleItem> list = new ArrayList();
    list.add(new SimpleItem("item 1"));
    list.add(new SimpleItem("item 2"));
    return list.iterator();
}

}

Writer.java

public class Writer implements ItemWriter<SimpleItem> {
@Override
public void write(List<? extends SimpleItem> list) throws Exception {
    for(SimpleItem item : list) {
        System.out.println(item.getName()); // this prints item 1 endelessly
    }
}
}

1 个答案:

答案 0 :(得分:1)

ItemReader#read的每次通话都以对Reader#getIterator的调用开始,这意味着每次调用阅读时都会获得一个新列表。你真的只想创建一次列表。

我们已基于List ItemReader实施。您可以在这里查看Github上的代码:https://www.openssl.org/related/binaries.html