如何将Classifier与ClassifierCompositeItemWriter结合使用?

时间:2018-11-27 13:46:36

标签: spring classification spring-batch itemwriter

在实现ClassifierCompositeItemwriter时遇到麻烦...

我正在读取基本的CSV文件,我想将其写入数据库。 根据数据(名称+名称1)将其写入简单的ItemWriter或使用CompositeItemwriter(写入两个不同的表)...

这是我的:ClassifierCompositeItemwriter参见>下面的错误消息

public ClassifierCompositeItemWriter<MyObject> classifierCompositeItemWriter() {
ClassifierCompositeItemWriter<MyObject> writer = new ClassifierCompositeItemWriter<MyObject>();
writer.setClassifier(new MySpecialClassifier());
return writer;
}

我尝试使用Classifier Interface

实现分类器
import org.springframework.batch.item.ItemWriter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.classify.Classifier;

@SuppressWarnings("serial")
public class MySpecialClassifier implements Classifier<MyObject, ItemWriter<MyObject>> {

@Autowired
ItemWriter<MyObject> writer1;

@Autowired
ItemWriter<MyObject> writer2;

@Override
public ItemWriter<MyObject> classify(MyObject obj) {

    if (!obj.getName().isEmpty() && !obj.getName1().isEmpty()) {
        return writer1;
    } else {
        return writer2;
    }
}
}

Eclipse一直告诉我: 类型为ClassifierCompositeItemWriter的setClassifier(Classifier>)不适用于参数(MySpecialClassifier)

1 个答案:

答案 0 :(得分:1)

您的分类器应如下所示:

public class MySpecialClassifier implements Classifier<MyObject, ItemWriter<? super MyObject>> {

    @Autowired
    ItemWriter<MyObject> writer1;

    @Autowired
    ItemWriter<MyObject> writer2;

    @Override
    public ItemWriter<MyObject> classify(MyObject obj) {

        if (!obj.getName().isEmpty() && !obj.getName1().isEmpty()) {
            return writer1;
        } else {
            return writer2;
        }
    }

}

唯一的区别是implements Classifier<MyObject, ItemWriter<? super MyObject>>而不是implements Classifier<MyObject, ItemWriter<MyObject>>

这是因为项目编写者不仅可以编写MyObject项,而且还可以编写MyObject超类的项。