如何初始化自定义 ItemReader?

How to initialize custom ItemReader?

我已经创建了自定义 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 接口的用途。 ItemStream 界面。 ItemStream 接口为 Spring Batch 组件的状态管理提供了便利。它包括一个 openupdateclose 方法,专门用于初始化状态、持久化所需的任何状态以及清除任何状态。在您的情况下,打开文件将在 open 方法中完成,而 close 方法将处理关闭句柄。这些方法通过 Spring 批处理框架自动调用,并在像 FlatFileItemReader 这样的阅读器中用于相同的事情。

事实上,由于 ItemStream 接口与 ItemReader 接口的结合使用如此普遍,我们有一个聚合接口 ItemStreamReader 来扩展两者。您可以在此处的文档中阅读有关 ItemStream 界面的更多信息:http://docs.spring.io/spring-batch/trunk/reference/html/readersAndWriters.html#itemStream