使用Spring Batch我试图将输入文件的每一行都作为一个String,将它提供给ItemProcessor而不在ItemReader中进行任何“CSV解析”.
我推出了一个配置Java类(使用@Configuration和@EnableBatchProcessing),其中包含以下reader()方法,该方法使下一个ItemProcessor抛出ClassCastException.
此ItemReader应读取输入文件,并将输入文件的每一行作为String传递给ItemProcessor.
@Bean
public ItemReader reader() {
FlatFileItemReader reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("data-to-process.txt"));
reader.setLineMapper(new DefaultLineMapper() {{
setLineTokenizer(new DelimitedLineTokenizer());
setFieldSetMapper(new PassThroughFieldSetMapper());
}});
return reader;
}
运行前面的代码时,我在ItemProcessor中得到一个异常,它期待来自reader()的String:
java.lang.ClassCastException: org.springframework.batch.item.file.transform.DefaultFieldSet cannot be cast to java.lang.String
我写的自定义ItemProcessor定义为:
public class MyOwnCustomItemProcessor implements ItemProcessor {
我相信我应该在ItemReader中使用这个PassThroughFieldSetMapper,我不想使用任何类型的tokenizer.根据文档,我认为我必须使用它,我无法避免它,但我一直在抛出异常.
如何将每个输入行作为String直接“传送”到ItemProcessor,例如?