Spring Batch Item Writer Listener无法正常工作

时间:2017-03-27 10:24:19

标签: java spring spring-boot spring-batch

我使用spring批处理并实现了项目编写器监听器。 My Item Writer Listener类是这样的

@Component
public class SomeItemWriterListener implements ItemWriteListener {

@Override
public void beforeWrite(List<Object> items) throws Exception {
    System.out.println("get here1");

}

@Override
public void afterWrite(List<Object> items) throws Exception {
    System.out.println("get here2");

}

@Override
public void onWriteError(List<Object> items, Exception ex) throws Exception {
    System.out.println("get here3");
}
}

然后我使用Java Config

在我的步骤中配置它
@Autowired
private SomeItemWriterListener writerListener;

@Bean
public Step step(StepBuilderFactory stepBuilderFactory,
    @Qualifier("itemReader")
        ItemReader<SomeItem> reader) {
    return stepBuilderFactory.get("step").listener(
        writerListener).chunk(
        chunkSize).reader(reader).processor(processor).writer(writer).build();
}

但是,在beforeWrite之后,没有调用afterWrite。当我添加一些错误onWriterError也没有调用。我在配置时错过了什么?

1 个答案:

答案 0 :(得分:3)

您正在调用StepBuilderHelper.listener(Object)方法,因为您只能看到基于注释的侦听器。接下来,您尝试在步骤级别注册侦听器,而您应该在块级别注册它。

@Bean
public Step step(StepBuilderFactory stepBuilderFactory, @Qualifier("itemReader") ItemReader<SomeItem> reader) {
    return stepBuilderFactory.get("step")
            .chunk(chunkSize)
              .reader(reader)
              .processor(processor)
              .writer(writer)
              .listener(writerListener)
            .build();
}

这将调用相应的listener(ItemWriteListener)方法(还有listener(Object)可能需要转换到ItemWriteListener接口以调用正确的方法。

相关问题