如何将分类器与 ClassifierCompositeItemWriter 一起使用?

How to use Classifier with ClassifierCompositeItemWriter?

在实现 ClassifierCompositeItemwriter 时遇到问题...

我正在阅读一个基本的 CSV 文件,我想将它们写成一个数据库。 根据数据 (Name + Name1) 将其写入简单的 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)

你的分类器应该是这样的:

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 超类的项目。