Требуется разъяснение с концепциями Spring Spring - PullRequest
0 голосов
/ 23 декабря 2011

Я новичок в Spring batch, и у меня возникла проблема с реализацией моего бизнес-сценария с использованием Spring batch.

По сути, я читаю данные из базы данных, то есть списка подписчиков на новостную рассылку. Затем мне нужно отправить электронное письмо каждому подписчику, а также вставить данные в базу данных, чтобы узнать, какому подписчику было отправлено письмо.

Я использую реализацию ItemProcessor, метод процесса которой возвращает MimeMessage и принимает в качестве аргумента подписчика; Писатель, связанный с этим процессором, имеет тип: org.springframework.batch.item.mail.javamail.MimeMessageItemWriter.

Проблема заключается в том, что мне нужен другой модуль записи для вставок базы данных (возможно, с использованием CompositeItemWriter), который принимает список подписчиков в качестве аргумента, и все, что я имею в качестве входных данных, - это MimeMessage из вышеуказанного ItemProcessor.

Может кто-нибудь помочь, пожалуйста?

1 Ответ

1 голос
/ 25 декабря 2011

Из того, что вы сказали, используя интерфейс ItemProcessor для сохранения сообщения в базе данных, концептуально не правильно.Для этого вам нужно использовать ItemWriter.Вы можете реализовать запись в БД как ItemWriter и отправку почтового сообщения как ItemWriter и использовать CompositeItemWriter для их объединения.

  • Subscriber передается этим создателям элементов.
  • Преобразование Subscriber в MimeMessage выполняется вторым писателем внутренне перед передачей в MimeMessageItemWriter (который агрегируется этим писателем).
  • Отправка сообщения подписчику должна быть выполнена после сохраненияв БД, так как БД можно откатить, если что-то пошло не так при отправке сообщения (если вам нужна эта функциональность), и размер пакета должен быть равен 1 (в противном случае при откате будут ошибочно отброшены все уведомления, которые были успешно отправлены).*
...