如何在将 GsonJsonObjectReader 与 MultiResourceItemReader 一起使用时设置委托 [英] How to set delegate while using GsonJsonObjectReader with MultiResourceItemReader
问题描述
我正在使用 spring-batch 多资源 JsonItemReader 从一个位置读取多个文件,如下所示:
I am using spring-batch multiresource JsonItemReader to read multiple files from a location as below:
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
上设置资源,所以我不需要这样做.
In the getDelegate()
is there a way to set a dummy resource given the fact that it is a mandatory field? I am setting resources on the MultiResourceItemReader
in the getReader()
method so I shouldn't need to do this.
我不能简单地从 getDelegate()
方法返回一个 new GsonJsonObjectReader<>(Trade.class)
,因为 MultiResourceItemReader
需要一个ResourceAwareItemReaderItemStream.
I cannot simply return a new GsonJsonObjectReader<>(Trade.class)
from the getDelegate()
method since the MultiResourceItemReader
expects a ResourceAwareItemReaderItemStream.
我在这里设置资源的最佳选择是什么?
Whats my best option here to set the resource?
推荐答案
这实际上是一个错误,而且 StaxEventItemReaderBuilder
似乎也会发生同样的问题.对于此用例,资源应该是可选的,因为在使用 FlatFileItemReader
作为 MultiResourceItemReader
的委托时允许它,请参阅 此处.
This is actually a bug, and it seems the same issue would happen with the StaxEventItemReaderBuilder
as well. The resource should be optional for this use case as it is allowed when using the FlatFileItemReader
as a delegate of a MultiResourceItemReader
, see here.
所以我认为应该对 JsonItemReaderBuilder
和 StaxEventItemReaderBuilder
做同样的事情.请在 Github 上打开一个问题并添加对此 SO 问题的引用.先谢谢你.
So I think the same should be done for JsonItemReaderBuilder
and StaxEventItemReaderBuilder
. Please open an issue on Github and add a reference to this SO question. Thank you upfront.
这篇关于如何在将 GsonJsonObjectReader 与 MultiResourceItemReader 一起使用时设置委托的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!