使用Spring Batch,我试图获取输入文件的每一行作为String
,将其提供给ItemProcessor
,而在ItemReader
中不进行任何“CSV解析”。
我提出了一个配置Java类(使用@Configuration
和@EnableBatchProcessing
),其中包含以下reader()
方法,该方法使下一个ItemProcessor
抛出ClassCastException
。
此ItemReader
应该读取输入文件,并将输入文件的每一行作为ItemProcessor
传递给String
。
@Bean
public ItemReader<String> reader() {
FlatFileItemReader<String> reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("data-to-process.txt"));
reader.setLineMapper(new DefaultLineMapper() {{
setLineTokenizer(new DelimitedLineTokenizer());
setFieldSetMapper(new PassThroughFieldSetMapper());
}});
return reader;
}
当运行前面的代码时,我在
ItemProcessor
中得到一个异常,它期望从String
中获得一个reader()
: java.lang.ClassCastException: org.springframework.batch.item.file.transform.DefaultFieldSet cannot be cast to java.lang.String
我编写的自定义
ItemProcessor
定义为: public class MyOwnCustomItemProcessor implements ItemProcessor<String, MyOwnCustomBusinessBean> {
我相信我应该在
PassThroughFieldSetMapper
中使用此ItemReader
,并且我不希望使用任何类型的标记器。根据文档,我认为我必须使用它,但我不能避免使用它,但是我一直在抛出异常。如何将每条输入行直接作为
String
“转移”到ItemProcessor
,例如? 最佳答案
如果可用,请使用PassThroughLineMapper
public class PassThroughLineMapper implements LineMapper<String> {
@Override
public String mapLine(String line, int lineNumber) throws Exception {
return line;
}
}