Как использовать Classifier с ClassifierCompositeItemWriter? - PullRequest
0 голосов
/ 27 ноября 2018

возникли проблемы с реализацией ClassifierCompositeItemwriter ...

Я читаю основной CSV-файл и хочу написать им базу данных.В зависимости от данных (Name + Name1) либо запишите их в простой ItemWriter, либо используйте CompositItemwriter (который записывает в две разные таблицы) ...

Это мой: ClassifierCompositeItemwriter см.>Сообщение об ошибке ниже

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

Я пытался реализовать классификатор, используя интерфейс классификатора

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 постоянно говорит мне: setClassifier (Classifier>) в типеClassifierCompositeItemWriter не применим для аргументов (MySpecialClassifier) ​​

1 Ответ

0 голосов
/ 27 ноября 2018

Ваш классификатор должен выглядеть следующим образом:

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.

...