Как использовать Classifier с ClassifierCompositeItemWriter?
Есть проблемы с реализацией ClassifierCompositeItemwriter...
Я читаю основной файл CSV, и я хочу написать им сделать базу данных. В зависимости от данных (Name + Name1) либо запишите их в простой ItemWriter, либо используйте CompositItem Writer (который записывает в две разные таблицы)...
Это мое: 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 ответ
Ваш классификатор должен быть таким:
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
,