我已经创建了我的自定义 ItemReader:
@Component("pricereader")
public class MyItemReader implements ItemReader<Price>{
@Override
public Price read() throws Exception, UnexpectedInputException, ParseException,
NonTransientResourceException {
// TODO Auto-generated method stub
return null;
}
在这样定义的作业中调用它:
<batch:job id="job1">
<batch:step id="step1">
<batch:tasklet>
<batch:chunk reader="pricereader" processor="priceprocessor" writer="pricewriter" commit-interval="1"/>
</batch:tasklet>
</batch:step>
</batch:job>
这个 itemReader 必须解析来自外部文件的数据。 我可以考虑这样的事情:
private Scanner scanner;
public MyItemReader(String filepath){
//initializing scanner
}
无论如何,我发现构造函数在 spring 初始化时被调用,我不喜欢在内存中保持与文件的打开连接的想法。 此外,我想使用此 ItemReader 从多个文件中读取数据,因此在构造函数中添加此信息也不是很好......有什么想法吗?
最佳答案
您所描述的正是 ItemStream
接口(interface)的用途。 ItemStream
接口(interface)。 ItemStream
接口(interface)为 Spring Batch 组件的状态管理提供了便利。它包括一个 open
、update
和 close
方法,专门用于初始化状态、持久化所需的任何状态以及清除任何状态.在您的情况下,打开文件将在 open
方法中完成,而 close
方法将处理关闭句柄。这些方法通过 Spring Batch 框架自动调用,并在阅读器中用于相同的事情,例如 FlatFileItemReader
。
事实上,由于 ItemStream
接口(interface)与 ItemReader
接口(interface)的结合使用如此普遍,我们有一个聚合接口(interface) ItemStreamReader
延伸两者。您可以在此处的文档中阅读有关 ItemStream
接口(interface)的更多信息:http://docs.spring.io/spring-batch/trunk/reference/html/readersAndWriters.html#itemStream
关于spring - 如何初始化自定义 ItemReader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29895345/