spring - 如何使用 Classifier 和 ClassifierCompositeItemWriter?
问题描述
在实现 ClassifierCompositeItemwriter 时遇到问题...
我正在阅读一个基本的 CSV 文件,我想把它们写成一个数据库。根据数据(名称+名称1)将其写入简单的ItemWriter或使用compositeItemwriter(写入两个不同的表)......
这是我的: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 不断告诉我: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
。
推荐阅读
- git - GIT 项目的 Jenkins 签出失败,权限被拒绝致命:无法分叉
- object-lifetime - Chapel:使用 zip 和用户定义的迭代器了解托管类的生命周期
- elasticsearch - 如何使用 multi_match、boosting、通配符和过滤器加入 ElasticSearch 查询?
- c# - 根据 ComboBox 选择更改 GroupBox 的内容
- c# - ABP 实时通知系统后台作业
- pandas - Pandas update() 运行时间很长
- javascript - localStorage:我无法使用 @ngx-pwa/local-storage 删除项目
- python - SQLAlchemy 没有提交更新
- javascript - D3.js 刻度格式:显示月份变化时
- sql - RDBMS:计算并打印返回日期、返回月份和返回年份