MultiResourceItemReader

MultiResourceItemReader

我正在使用spring-batch multiresource JsonItemReader从如下位置读取多个文件:

public MultiResourceItemReader<Trade> getReader() {
   ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
   Resource[] resources = resolver.getResources("file:" + "D:/files/trade*.json");//trade1.json, trade2.json, etc
   MultiResourceItemReader<Trade> reader = new MultiResourceItemReader<>();
   reader.setResources(resources);
   reader.setDelegate(getDelegate());
   return reader;
}

private JsonItemReader<Trade> getDelegate() {
   return new JsonItemReaderBuilder<Trade>()
             .jsonObjectReader(new GsonJsonObjectReader<>(Trade.class))
             .resource(??) /* <--- what to specify here since resource is a mandatory field*/
             .name("tradeJsonItemReader")
             .build();
}


getDelegate()中,鉴于它是必填字段,是否可以设置虚拟资源?我在MultiResourceItemReader方法中的getReader()上设置资源,所以我不需要这样做。

我不能简单地从new GsonJsonObjectReader<>(Trade.class)方法返回getDelegate(),因为MultiResourceItemReader需要ResourceAwareItemReaderItemStream

在这里设置资源的最佳选择是什么?

最佳答案

这实际上是一个错误,并且StaxEventItemReaderBuilder似乎也会发生相同的问题。对于该用例,该资源应该是可选的,因为在将FlatFileItemReader用作MultiResourceItemReader的委托时允许使用该资源,请参见here

因此,我认为应该对JsonItemReaderBuilderStaxEventItemReaderBuilder执行相同的操作。请在Github上打开一个问题,并添加对此SO问题的引用。预先感谢您。

10-07 21:01