0

我正在编写一个 spring 批处理应用程序,它包含以下功能步骤:

  1. 从暂存区选择最新的 xml 文件
  2. 根据架构验证 XML
  3. 将 XML 的内容写入数据库。
  4. 向利益相关者发送邮件,提供工作状态。

这是一个简单的工作场景。在这种情况下,#3 是面向块的步骤,剩下的可以作为 tasklet 或 listeners 一次性执行。

问题:是否有任何准则可以区分 tasklet 和 listener。(例如:#4:发送邮件可以实现为监听器或步骤。)

4

1 回答 1

2

在考虑使用 tasklet 或 listener 时,您需要从潜在的重试角度考虑它们。

如果您在第 3 步放置一个监听器,它将在您每次重试作业时运行。因此,如果您在第 3 步中出现故障(比如说在您的处理过程中途并且整个作业停止),当您重试整个作业时,您的侦听器将再次被调用。

如果您使用 tasklet,默认情况下它不会重新运行。即第1步和第2步都成功了,所以不需要再次执行,只需转到失败的步骤(#3)并重试即可。

所以,一个简单的方法来看待它, - tasklet == 如果成功则运行一次 - listener == 每次运行(包括重试)

于 2013-06-13T15:29:31.680 回答