如何在将 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.
所以我认为 JsonItemReaderBuilder
和 StaxEventItemReaderBuilder
也应该这样做。请在 Github 上打开一个问题并添加对此 SO 问题的引用。先谢谢你。
我正在使用 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.
所以我认为 JsonItemReaderBuilder
和 StaxEventItemReaderBuilder
也应该这样做。请在 Github 上打开一个问题并添加对此 SO 问题的引用。先谢谢你。