Spring 批次:自定义 ItemReader
Spring Batch : custom ItemReader
我有一个 Spring 带有简单自定义 reader 和编写器的批处理项目。当我 运行 代码时,我以无限循环打印第一项 "item 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
}
}
}
每次调用 ItemReader#read
都以调用 Reader#getIterator
开始,这意味着每次调用 read 时都会得到一个新列表。您真的只想创建一次列表。
我们已经有了基于 List
的 ItemReader
实施。您可以在 Github 上查看它的代码:https://github.com/spring-projects/spring-batch/blob/master/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/support/ListItemReader.java
我有一个 Spring 带有简单自定义 reader 和编写器的批处理项目。当我 运行 代码时,我以无限循环打印第一项 "item 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
}
}
}
每次调用 ItemReader#read
都以调用 Reader#getIterator
开始,这意味着每次调用 read 时都会得到一个新列表。您真的只想创建一次列表。
我们已经有了基于 List
的 ItemReader
实施。您可以在 Github 上查看它的代码:https://github.com/spring-projects/spring-batch/blob/master/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/support/ListItemReader.java