1

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

我想开始使用 chunk-processng 来读取文件,处理它,但我不需要 FlatFileItemWriter 来写入文件。但是,bean 初始化需要我在编写器上设置一个资源。

我要解决这个问题了吗?是块=处理错误的方法。创建一个 tasklet 更明智,但我喜欢 SpringBatch 会为我读取我的文件。使用 tasklet,我必须编写代码来打开和处理文本文件。正确的?

关于如何进行的建议将不胜感激。

4

1 回答 1

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;
    }

} 
于 2013-07-01T17:21:03.323 回答