Spring批处理概念需要澄清

时间:2011-12-23 15:23:58

标签: spring-batch itemwriter itemprocessor

我是Spring批处理的新手,我遇到了使用Spring批处理实现业务用例的问题。

基本上,我正在从数据库中读取数据,即新闻通讯的订阅者列表。然后,我需要向每个订阅者发送一封电子邮件,并将数据插入数据库,以便知道电子邮件发送到哪个订阅者。

我使用ItemProcessor实现,其进程方法返回MimeMessage并将订阅者作为参数;与此处理器关联的编写器类型为:org.springframework.batch.item.mail.javamail.MimeMessageItemWriter

问题是我需要另一个用于数据库插入的编写器(可能使用CompositeItemWriter),它将订阅者列表作为参数,而我所拥有的只是来自上述ItemProcessor的MimeMessage。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您所说的使用ItemProcessor界面将消息保存到数据库在概念上是不对的。您需要使用ItemWriter。您可以以ItemWriter实现对数据库的写入,并将邮件作为ItemWriter发送,并使用CompositeItemWriter进行组合。

  • Subscriber将传递给这些项目编写者。
  • SubscriberMimeMessage的转换由内部第二作者转移,然后转移到MimeMessageItemWriter(由本作者汇总)。
  • 在保存到数据库之后,应该将消息发送给订阅者,因为如果发送消息出现问题(如果您需要该功能),则可以回滚数据库,并且您的批处理大小应为1(否则回滚将错误地丢弃所有已成功发送的通知。)