Spring:使用FlatFileItemReader

时间:2017-08-10 13:40:48

标签: spring spring-batch

我可以使用FlatFileItemReader作为批处理的读者吗?我想用它来解析File。

我有读者之豆:

<bean id="cvsFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
    <property name="resource" value="file:${garmin.fs.in.received2}" />
    <property name="lineMapper">
        <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
            <property name="lineTokenizer">
                <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                    <property name="names" value="id,sales,qty,staffName,date" />
                </bean>
            </property>
            <property name="fieldSetMapper">
                <bean class="my.app.util.ReportFieldSetMapper" />
            </property>
        </bean>
    </property>
</bean>

我想在我的组件中使用它:

@Component
public class Handler {

    @Autowired
    private FlatFileItemReader<Report> reader;

    public File handleFile() {
        try {
            Report report = reader.read();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return input;
    }          
}

但是在代码中:

Report report = reader.read();

我有例外:

org.springframework.batch.item.ReaderNotOpenException:Reader必须     在可以阅读之前打开。

是否可以通过以下方式使用弹簧批量阅读器?

2 个答案:

答案 0 :(得分:0)

如异常所示,您必须在第一次致电cout << l1.first << " tiene " << l1.second << " paginas\n" << l2.first << " tiene " << l2.second << " paginas\n" << l3.first << " tiene " << l3.second << " paginas\n"; 之前致电reader.open()

完成后,您还应该致电read()

答案 1 :(得分:0)

您必须实现ItemStream并重写如下的open,close和update方法-

@Component
public class Handler implements ItemStream {

    @Autowired
    private FlatFileItemReader<Report> reader;

    public File handleFile() {
        try {
            Report report = reader.read();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return input;
    }  

    @Override
    public void open(ExecutionContext executionContext) {
        reader.open(executionContext);
    }

    @Override
    public void update(ExecutionContext executionContext) {
        reader.update(executionContext);

    }

    @Override
    public void close() {
        reader.close();

    }        
}