我想读取一个文本文件来构建一个地图,并将其放入ExecutionContext中以供以后参考。
我想开始使用分块处理来读取文件,然后处理它,但我不需要FlatFileItemWriter来写入文件。但是,bean初始化要求我在编写器上设置一个资源。
我说错了吗?chunk=process是错误的方法吗?创建一个微线程可能更明智,但我喜欢SpringBatch为我读取我的文件。使用微线程,我必须编写代码来打开和处理文本文件。对吗?
对于如何进行的建议,我们将非常感谢。
发布于 2013-07-02 01:21:03
我最后做的(我是新手)是创建一个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;
}
} https://stackoverflow.com/questions/17408611
复制相似问题