2013-07-01 17 views
1

我想读取读取文本文件以构建映射并将其放入ExecutionContext以供以后参考。如何使用FlatFileReader读取,但只写入ExecutionContext

我以为开始使用chunk-processng来读取文件,它的过程,但我不需要FlatFileItemWriter来写入文件。但是,初始化bean需要我在writer上设置一个资源。

我是否在谈论这个错误?大块=处理错误的方法。创建一个tasklet我更聪明,但我喜欢SpringBatch会为我读取我的文件。有了一个tasklet,我不得不编写代码来打开和处理文本文件。对?

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

回答

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

}