【问题标题】:How to set delegate while using GsonJsonObjectReader with MultiResourceItemReader如何在将 GsonJsonObjectReader 与 MultiResourceItemReader 一起使用时设置委托
【发布时间】:2020-10-07 19:13:29
【问题描述】:

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

我不能简单地从getDelegate() 方法返回new GsonJsonObjectReader&lt;&gt;(Trade.class),因为MultiResourceItemReader 需要ResourceAwareItemReaderItemStream

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

【问题讨论】:

    标签: java spring spring-boot spring-batch


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。已打开一个问题:github.com/spring-projects/spring-batch/issues/3731
    • 对于未来的读者来说,直到这个问题得到解决,一个hacky方法是设置一个虚拟字符串:.resource(new FileSystemResource("DummyResource)) 因为这个资源永远不会被使用。
    • 感谢您打开问题,我们会尽快修复。我相信我回答了你的问题,所以如果有帮助请接受:stackoverflow.com/help/someone-answers。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 2010-10-09
    • 2017-04-16
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多