首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Batch CompositeItemWriter如何正确设置编写器委托

Spring Batch CompositeItemWriter如何正确设置编写器委托
EN

Stack Overflow用户
提问于 2017-07-28 02:04:04
回答 2查看 2.9K关注 0票数 0

嗨,我正在尝试添加两个编写器到一个spring batch compositeitemwriter中。我收到一个错误,说:

代码语言:javascript
复制
The method setDelegates(List<ItemWriter<? super MyObject>>) in the type CompositeItemWriter<MyObject> is not applicable for the arguments (List<ItemWriter<MyObject>>)

下面是我的代码

代码语言:javascript
复制
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这是我能找到的最接近的代码,但它使用了泛型类型,这也给了我一个错误。

谢谢你的帮助!我刚来spring batch。

EN

回答 2

Stack Overflow用户

发布于 2017-08-08 23:46:28

尝试修改...

代码语言:javascript
复制
List<ItemWriter<MyObject>> writerList = new ArrayList<ItemWriter<MyObject>>();

...with:

代码语言:javascript
复制
List<ItemWriter<? super MyObject>> writerList = new ArrayList<ItemWriter<? super MyObject>>();

CompositeItemWriter#setDelegates采用List<ItemWriter<? super T>>形式的列表。

参见spring documentation

票数 0
EN

Stack Overflow用户

发布于 2018-11-27 16:23:17

以防你找不到合适的解决方案。我会这样做:

代码语言:javascript
复制
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;
}

我希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45358029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档