【问题标题】:Spring Batch CompositeItemWriter How to properly set writer delegatesSpring Batch CompositeItemWriter 如何正确设置编写器委托
【发布时间】:2017-07-27 18:04:04
【问题描述】:

您好,我正在尝试将两个编写器添加到 Spring Batch Compositeitemwriter 中。我收到一条错误消息:

The method setDelegates(List<ItemWriter<? super MyObject>>) in the type CompositeItemWriter<MyObject> is not applicable for the arguments (List<ItemWriter<MyObject>>)

下面是我的代码

public ItemWriter<MyObject> myWriter(){
    ItemWriter<MyObject> myWriter = new myWriter();
    return myWriter;
}

public ItemWriter<MyObject> myOtherWriter(){
    ItemWriter<MyObject> myOtherWriter = new MyOtherWriter();
    return myOtherWriter;
}

public CompositeItemWriter<MyObject> compositeItemWriter(){
    CompositeItemWriter<MyObject> writer = new CompositeItemWriter<MyObject>();
    List<ItemWriter<MyObject>> writerList = new ArrayList<ItemWriter<MyObject>>();
    writerList.add(myWriter());
    writerList.add(myOtherWriter());
    writer.setDelegates(writerList); //<-- ERROR HERE
    return writer;
}

我找不到任何不使用 xml 的复合项目编写器的强大代码示例。我知道我的错误与泛型类型参数有关,我对此知之甚少。谁能解释为什么上面的代码不起作用以及如何解决它? Multiple itemwriters in Spring batch 这是我能找到的最接近的,但它使用泛型类型,这也会给我一个错误。

感谢您的帮助!我是春季批次的新手。

【问题讨论】:

    标签: java spring-batch


    【解决方案1】:

    尝试修改...

    List<ItemWriter<MyObject>> writerList = new ArrayList<ItemWriter<MyObject>>();
    

    ...与:

    List<ItemWriter<? super MyObject>> writerList = new ArrayList<ItemWriter<? super MyObject>>();
    

    CompositeItemWriter#setDelegates 采用List&lt;ItemWriter&lt;? super T&gt;&gt; 形式的列表。

    spring documentation

    【讨论】:

      【解决方案2】:

      以防万一您没有找到合适的解决方案。 我会这样做:

      public ItemWriter<MyObject> myWriter() {
          ItemWriter<MyObject> myWriter = new JdbcBatchItemWriter<MyObject>(); //  <-- Example item writer 1
          return myWriter;
      }
      
      public ItemWriter<MyObject> myOtherWriter() {
          ItemWriter<MyObject> myOtherWriter = new JdbcBatchItemWriter<MyObject>(); //  <-- Example item writer 2
          return myOtherWriter;
      }
      
      public CompositeItemWriter<MyObject> compositeItemWriter() {
          CompositeItemWriter<MyObject> writer = new CompositeItemWriter<MyObject>();
          writer.setDelegates(Arrays.asList(myWriter(),myOtherWriter())); //<-- NO ERROR HERE :)
          return writer;
      }
      

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2019-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-02
        • 2013-11-26
        • 2016-05-13
        相关资源
        最近更新 更多