将每周电子邮件传递/新闻稿与Spring Framework集成

时间:2013-07-30 23:07:30

标签: java spring servlets spring-mvc email-integration

对于我的基于Spring的Web应用程序,我现在需要每周向我的应用程序用户发送电子邮件。

这些要求的优雅解决方案是什么?

到目前为止,我已经提出了以下可能的解决方案:

  • 专用 cron作业,我计划每周运行一次,独立于我的Web应用程序JVM进程和Web应用程序Servlet容器之外运行。
    这个过程负责发送每周的电子邮件。要完成发送个性化电子邮件,它会重用我已经为我的Web应用程序开发的域类(例如我的User类)。这个专用进程同时访问我的应用程序的MySQL数据库到正在运行的Spring Web MVC servlet?
  • 计划机制内部我的 Spring Web MVC servlet或内部我的 Servlet容器
    在此设置中,电子邮件发送在与我的Web服务Spring Web MVC servlet相同的JVM和相同的servlet容器内。也许这个设置具有(不相关的?)优点,例如“数据库连接池共享”和“事务共享”“类共享”与托管在同一环境中的servlet。
  • 使用或不使用 Spring Batch ,用于上述任何设置。
    我现在没有使用Spring Batch的经验来判断Spring Batch是否是适合我的要求的工具。

也许还有其他解决方案?

我对能够提供见解和指导以做出明智决定的答案特别感兴趣。

与特定问题无关,电子邮件是通过我自己的基础设施还是使用第三方电子邮件SaaS服务发送的。

3 个答案:

答案 0 :(得分:1)

根据您的描述,生成新闻摘要的代码必须与您的主应用程序共享公共代码库。因此,自然的解决方案是使用您的主要应用程序开发此代码。开放案例是如何触发此代码:

  1. 来自CRON。您从CRON启动一个脚本,该脚本将触发您的应用程序以某种方式中的功能。这在某种程度上可能是一个监听特定端口的过程,或者对于Web应用程序来说很自然的一个专用URL会触发新闻通讯。只需确保URL不能从外部运行,只能从localhost运行(例如,检查调用者IP)。但是,当CRON启动脚本时,您必须处理您的应用程序已关闭(例如重新启动)的情况。
  2. 从应用程序中。例如,使用Quartz。减号是您需要包含新库,为Quartz创建数据库表。加上 - Quartz将处理在应用程序关闭时安排任务的情况,因为它存储了有关在DB中启动的内容的信息。

答案 1 :(得分:1)

我们总是使用cron将JMS消息发送到队列,并使用专用进程来使用这些消息。您可以将电子邮件内容添加到邮件中,或者仅将邮件用作触发器。这种方法的好处是你可以从任何地方触发JMS消息,并有多个处理程序许多不同的电子邮件方案。唯一的缺点是安装JMS代理,如果你还没有...

答案 2 :(得分:1)

我正在构建一个基于Spring-MVC的Web应用程序,需要向一小群人发送每周简报。我正在使用Spring的内置调度机制。 http://static.springsource.org/spring/docs/3.0.x/reference/scheduling.html

是的,在此设置中,电子邮件发送在同一个JVM和同一个servlet容器中进行,实现解决方案非常简单方便。我观察到这种机制的稳定性和可靠性,现在无法对此进行更多反馈。