如何将分类器与 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
超类的项目。
在实现 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
超类的项目。