0

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

有什么优雅的解决方案可以满足这一要求?

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

  • 我计划每周运行一次的专用cron 作业,独立于我的 Web 应用程序 JVM 进程和 Web 应用程序 Servlet 容器之外运行。
    这个过程负责发送那些每周的电子邮件。为了完成发送个性化的电子邮件,它重用User了我已经为我的 Web 应用程序开发的域类(例如我的类)。这个专用进程同时访问我的应用程序的 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 服务发送的,这与这个特定问题无关。

4

3 回答 3

1

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

于 2013-07-31T07:47:38.487 回答
1

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

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

于 2013-08-02T07:09:29.807 回答
1

根据您的描述,生成时事通讯的代码必须与您的主应用程序共享通用代码库。因此,自然的解决方案是在您的主应用程序中开发此代码。公开案例是如何触发此代码:

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