如何在将 GsonJsonObjectReader 与 MultiResourceItemReader 一起使用时设置委托 [英] How to set delegate while using GsonJsonObjectReader with MultiResourceItemReader

查看:20
本文介绍了如何在将 GsonJsonObjectReader 与 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.

所以我认为应该对 JsonItemReaderBuilderStaxEventItemReaderBuilder 做同样的事情.请在 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆