我有春季工作,读取文件,处理数据,然后将其写入oracle数据库。

声明我的工作时出现问题,错误:

对于类型SimpleStepBuilder ,Map >,方法listener(Object)模棱两可

我不明白该错误,为什么它没有使用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
    }
}

最佳答案

我遇到了同样的问题。

我不知道这是否是处理此问题的最佳方法,但我通过投放
ItemListenerListener的ItemListenerSupport子类

这里的听众:

class CustomListener extends ItemListenerSupport<Input, Output> {

@Override
public void onProcessError(Input item, Exception e) {
    log.error(item.toString(), e);
}

public ItemProcessListener<? super Input, ? super Output> asItemProcessListener() {
    return this;
}


}

这里的步骤定义

steps.get("step").<Input, Output>chunk(10)
    .reader(reader)
    .listener(listener.asItemProcessListener())
    .processor(processor)
    .build()

10-06 13:22
查看更多