如何在将 GsonJsonObjectReader 与 MultiResourceItemReader 一起使用时设置委托

How to set delegate while using GsonJsonObjectReader with MultiResourceItemReader

我正在使用 spring-批处理多资源 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() 中,有没有办法设置虚拟资源,因为它是必填字段?我正在 getReader() 方法中的 MultiResourceItemReader 上设置资源,所以我不需要这样做。

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

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

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

所以我认为 JsonItemReaderBuilderStaxEventItemReaderBuilder 也应该这样做。请在 Github 上打开一个问题并添加对此 SO 问题的引用。先谢谢你。