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

10-06 11:18