spring - 如何初始化自定义 ItemReader?

标签 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 从多个文件中读取数据,因此在构造函数中添加此信息也不是很好......有什么想法吗?

最佳答案

您所描述的正是 ItemStream 接口(interface)的用途。 ItemStream 接口(interface)。 ItemStream 接口(interface)为 Spring Batch 组件的状态管理提供了便利。它包括一个 openupdateclose 方法,专门用于初始化状态、持久化所需的任何状态以及清除任何状态.在您的情况下,打开文件将在 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/

相关文章:

java - JSR 352 Spring 批处理 : Transaction Management

java - 使用步骤决定器和 block 时的 Spring 批处理

java - Spring Batch - 无法将记录保存到 Postgres 数据库中

java - 如何使用spring批处理在postgresql中执行存储过程?

java - 在存储库中返回空点异常 - Spring Boot

java - 使用 @JsonTypeInfo 和 @JsonSubTypes 将 JSON 反序列化为多态对象模型不起作用?

java - 将 spring boot jar 转换为 war

java - Amazon S3 连接返回错误请求

java - 在 Spring 中使用拦截器解决业务逻辑问题

java - Spring Batch 托管事务回滚时重试不起作用