我正在使用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。
因此,我认为应该对JsonItemReaderBuilder
和StaxEventItemReaderBuilder
执行相同的操作。请在Github上打开一个问题,并添加对此SO问题的引用。预先感谢您。