首页 > 解决方案 > ItemReader 类中的 SpringBatch read() 函数返回类型为 String 并希望返回 FlatFileItemReader, 我该怎么做?

问题描述

我的 Springbatch 配置类有以下工作:

public Job job(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
  Step step = stepBuilderFactory.get("sampleSetp")
  .<String, String>chunk(10)
  .reader(new Reader())
  .writer(new Writer())
  .build();
}

我的阅读器课程是:

public class Reader implements ItemReader<String> {
  @Override
  public String read() {
  FlatFileItemReader<String> reader = new FlatFileItemReader<String>();
  reader.setResource(someResource);
  reader.setLineMapper(lineMapper());
  
  **return reader; //This should be string, but i have FlatFileItemReader<String> type.**
  }
} 

我正在阅读器(FlatFileItemReader)上做一些工作,并想返回这个阅读器的工作,但 read() 返回类型是字符串。

我应该如何将此阅读器发送到 BathConfig 中的工作?

注意:如果我在 springConfig 文件中执行此 FlatFileItemReader 处理并将其传递给那里的作业,那么它只会工作。前任:

Step step = stepBuilderFactory.get("sampleSetp")
  .<String, String>chunk(10)
  .reader(flatFileReader())
  .write()
  .build();

其中 flatFileReader() 是:

public FlatFileItemReader<String> flatFileReader(){
 ...
 return FlatFileItemReader<String> type
}

标签: spring-batch

解决方案


ItemReader 类中的 SpringBatch read() 函数返回类型是 String 并且想要返回 FlatFileItemReader ,我应该怎么做?

read方法应返回实际项目(在您的情况下为 String )而不是另一个阅读器。如果您想要一个委托给 a 的自定义阅读器FlatFileItemReader,您可以执行以下操作:

public class Reader implements ItemReader<String> {
   private FlatFileItemReader<String> delegate;
   public Reader(FlatFileItemReader<String> delegate) {
      this.delegate = delegate;
   }

   @Override
   public String read() {
      return delegate.read();
   }
}

推荐阅读