【发布时间】:2020-06-27 02:03:32
【问题描述】:
我正在学习 Spring 批处理。我有一个小的基本工作,它将从平面文件中读取数据并将其写入数据库并发送通知。工作很好。 现在我想使用 ItemReadListener 来了解它是如何工作的,所以我将它添加到我的工作中。 但是当我运行作业时,ItemReadListener 永远不会被调用 下面是我的 ItemListener 的代码
public class CustomItemReadListener implements ItemReadListener {
@Override
public void beforeRead() throws Exception {
System.out.println("Before Read");
}
@Override
public void afterRead(Object o) throws Exception {
System.out.println("afterRead");
System.out.println(o.toString());
}
@Override
public void onReadError(Exception e) throws Exception {
}
}
我的工作定义如下
<job id="loaddataToDatabase" xmlns="http://www.springframework.org/schema/batch">
<step id="loadDataStep">
<tasklet transaction-manager="transactionManager">
<chunk commit-interval="100" reader="feedItemReader" writer="feedItemWriter">
<listeners>
<listener ref="customItemReadListener">
</listener>
</listeners>
</chunk>
</tasklet>
<next on="FAILED" to="sendFileLoadNotification"/>
<next on="*" to="sendFileLoadNotification"/>
</step>
</job>
<bean id="customItemReadListener" class="com.listeners.CustomItemReadListener" scope="step"/>
作业成功运行,但从未调用 ItemReadListener。我的工作配置是正确的还是我遗漏了什么? 谢谢。
【问题讨论】:
-
您确定至少阅读了一项吗?还是因为错误而调用了 listener#onReadError()?
-
您好,我可以看到记录已被读取并写入数据库,但从未调用过侦听器
-
您可以删除监听器的范围并重新运行该作业吗?在这种情况下,范围似乎毫无用处。我无法调试,所以如果您没有找到并且没有人回答您的问题,您可以将 SB 日志设置为调试级别并自己阅读日志或调试流程
-
您是否尝试将
listeners移到<chunk>元素之外并放在<tasklet>下(又名<chunk>旁边)?
标签: spring spring-boot spring-batch