【发布时间】:2018-12-15 00:34:47
【问题描述】:
我有读取文件、处理数据然后将其写入 oracle 数据库的 spring 作业。
我在宣布我的工作时遇到问题,错误:
方法 listener(Object) 对于 SimpleStepBuilder,Map>
类型不明确我不明白这个错误,为什么它不使用 listener(ItemListener..) method 。有什么想法吗?
编辑:使用单独的侦听器,有 3 个对象实现 ItemWriteListener<T>、ItemReadListener<T> 和 ItemProcessorListener<T,O> 并构建这样的步骤:
//...
.reader(/* custom ItemReader */)
.listener(/* custom ItemReadListener<T> */)
.listener(/* custom ItemWriterListener<T> */)
.listener(/* custom ItemProcessorListener<T,O> */)
//...
.build();
错误消失了,但我仍然不明白为什么它不适用于ItemListenerSupport 类..
这是我的步骤的构建方式:
SimpleStepBuilder<Map<String, Object>, Map<String, Object>> stepBuilder = stepBuilderFactory
.get("testStep")
.<Map<String, Object>, Map<String, Object>>chunk(5000)
.reader(/* custom ItemReader<Map<String, Object>> object */));
.processor(/*custom ItemProcessor<Map<String, Object>, Map<String, Object>> object */))
.writer(/*custom ItemWriter<Map<String,Object> object */)
.listener(new GenericItemListener<Map<String, Object>, Map<String, Object>>())
.build();
这是我的自定义ItemListenerSupport:
import java.util.List;
import org.springframework.batch.core.listener.ItemListenerSupport;
public class GenericItemListener<I, R> extends ItemListenerSupport<I, R> {
@Override
public void onReadError(Exception e) {
//do something
}
@Override
public void onWriteError(Exception e, List<? extends R> items) {
//do something
}
@Override
public void onProcessError(I items, Exception e) {
//do something
}
}
【问题讨论】:
-
我不知道你想用你的听众实现什么。您可以使用 try catch 块来处理异常/错误。我使用单独的侦听器(如 ItemWriterListener,我需要它来计算写入计数)。
标签: java spring spring-boot spring-batch