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

SpringBatch read() function in ItemReader class return type is String and Want to return FlatFileItemReader<String> , How should i Do it?

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

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

而我的 Reader class 是:

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.**
  }
} 

我正在 reader(FlatFileItemReader) 上做一些工作,想 return 完成这个 reader 但 read() return 类型是字符串。

我应该如何将此 reader 发送到 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
}

SpringBatch read() function in ItemReader class return type is String and Want to return FlatFileItemReader , How should i Do it?

read 方法应该 return 实际项目(在您的情况下是一个字符串)而不是另一个 reader。如果你想要一个委托给 FlatFileItemReader 的自定义 reader,你可以这样做:

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();
   }
}