我们正在开发一个基于Spring的批处理和基于Hibernate的应用程序,它将负责发送1000封电子邮件。
简而言之,目前只有一个步骤定义了一个工作。
<job id="emailJob" xmlns="http://www.springframework.org/schema/batch" restartable="true"
job-repository="jobRepository">
<step id="emailJobFetchUsers">
<tasklet>
<chunk reader="emailItemReader" processor="emailItemProcessor" writer="emailItemWriter" commit-interval="1"/>
</tasklet>
<end on="COMPLETED"/>
<fail on="FAILED"/>
</step>
<listeners>
<listener ref="loggingListener"/>
</listeners>
</job>
虽然这是有效的,但我不确定它是否应该全部是一步,或者是否应该有一个步骤负责每个动作。我主要担心的是可重启性和恢复性。也就是说,这样的例外发生在一个用户身上(可能是由于无效的电子邮件地址或生成电子邮件的问题),或者如果应用程序服务器出现故障并重新启动,我希望它能够从它离开的地方接收发送电子邮件关闭。
有人可以就上述事项提出建议吗?
谢谢,
答案 0 :(得分:0)
是的,应该可以重启。检查读者超类的javadoc。但是,您需要注意以下事项:
如果发生以下情况,我相信更多:
然后查询结果可能与第一次(失败)执行期间的结果不同。如果您的应用程序可以使用这种情况,那么我建议添加一些条件来防止它 - 比如在查询中添加一个检查以跳过在第一个作业执行时间之后注册的客户。