我们正在开发一个基于 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>
- emailItemReader 扩展了 HibernateCursorItemReader 并将返回行的实体(在这种情况下,代表客户选择的电子邮件的记录)
- emailItemProcessor 生成并发送客户特定的电子邮件
- emailItemWriter 只是更新实体,其中包含一些信息,例如上次发送日期
虽然这可行,但我不确定它是否应该都是一个步骤,或者是否应该有一个步骤负责每个动作。我主要关心的是可重启性和恢复。也就是说,一个用户会发生这种异常(可能是由于电子邮件地址无效或生成电子邮件的问题),或者如果应用程序服务器出现故障并重新启动,我希望它能够从它离开的地方接收发送电子邮件离开。
任何人都可以就上述问题提出建议吗?
谢谢,