如何初始化自定义ItemReader?

时间:2015-04-27 12:08:33

标签: spring spring-batch

我创建了自定义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从多个文件中读取数据,因此在构造函数中添加这些信息也不是很好......任何想法?

1 个答案:

答案 0 :(得分:2)

您所描述的正是ItemStream接口的用途。 ItemStream接口。 ItemStream接口为Spring Batch组件的状态管理提供了便利。它包含openupdateclose方法,专门用于初始化状态,持久保存所需状态以及清理任何状态。在您的情况下,打开文件将在open方法中完成,close方法将处理关闭句柄。这些方法通过Spring Batch框架自动调用,并在FlatFileItemReader等读者中用于相同的操作。

事实上,由于ItemStream接口与teh ItemReader接口的结合使用非常普遍,因此我们有一个扩展接口ItemStreamReader。您可以在此处的文档中详细了解ItemStream界面:http://docs.spring.io/spring-batch/trunk/reference/html/readersAndWriters.html#itemStream