我使用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也没有调用。我在配置时错过了什么?
答案 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
接口以调用正确的方法。