如何使用FlatFileReader读取,但只能写入ExecutionContext

时间:2013-07-01 15:51:15

标签: spring-batch

我想阅读读取文本文件以构建地图并将其放入ExecutionContext以供以后参考。

我想开始使用chunk-processng读取文件,进程,但我不需要FlatFileItemWriter写入文件。但是,bean初始化需要我在writer上设置资源。

我是不是错了? chunk =处理错误的方法。创建一个tasklet我更聪明,但我喜欢SpringBatch会为我读取我的文件。使用tasklet,我必须编写代码来打开和处理文本文件。正确?

非常感谢有关如何进行的建议。

1 个答案:

答案 0 :(得分:0)

我做的事情(我是新手)是创建一个Tasklet,并让它实现StepExecutionListener接口。工作就像一个魅力。它按行读取逗号分隔的文件,从第二列中删除。我为ExecutionContext映射键创建了一个“枚举”。基本上,这个如下:

public class ProcessTabcPermitsTasklet implements Tasklet, StepExecutionListener {

    private Resource resource;
    private int linesToSkip;
    private Set<String> permits = new TreeSet<String>();

    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext)  throws Exception {

        BufferedReader reader = new BufferedReader((new FileReader(resource.getFile())));
        String line = null;
        int lines = 0;

        while ((line = reader.readLine()) != null) {

            if (++lines <= linesToSkip)
                continue;

            String[] s = StringUtils.commaDelimitedListToStringArray(line);
            permits.add(s[TABC_COLUMNS.PERMIT.ordinal()]);

        }

        return RepeatStatus.FINISHED;
    }

    /**
     * @param file
     *            the file to set
     */
    public void setResource(Resource resource) {
        this.resource = resource;
    }

    /**
     * @param linesToSkip
     *            the linesToSkip to set
     */
    public void setLinesToSkip(int linesToSkip) {
        this.linesToSkip = linesToSkip;
    }


    public ExitStatus afterStep(StepExecution stepExecution) {
        stepExecution.getExecutionContext().put(EXECUTION_CONTEXT.TABC_PERMITS.toString(), permits);
        return ExitStatus.COMPLETED;
    }

}