嗨,我正在尝试添加两个编写器到一个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这是我能找到的最接近的代码,但它使用了泛型类型,这也给了我一个错误。
谢谢你的帮助!我刚来spring batch。
发布于 2017-08-08 23:46:28
尝试修改...
List<ItemWriter<MyObject>> writerList = new ArrayList<ItemWriter<MyObject>>();...with:
List<ItemWriter<? super MyObject>> writerList = new ArrayList<ItemWriter<? super MyObject>>();CompositeItemWriter#setDelegates采用List<ItemWriter<? super T>>形式的列表。
参见spring documentation。
发布于 2018-11-27 16:23:17
以防你找不到合适的解决方案。我会这样做:
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;
}我希望这能有所帮助。
https://stackoverflow.com/questions/45358029
复制相似问题