我想在系统时钟达到下午 12 点时从 servlet 调用一个方法,并且该方法基本上通过电子邮件从数据库向用户发送一些数据。请任何人帮助我如何在 Java Servlet 中实现这一点。
问问题
134 次
2 回答
5
为了在特定时间安排作业,Quartz 提供了最好的 API。您可以根据需要创建一个作业,并创建一个触发器以在下午 12 点调用该作业。只需借助以下链接。 Quartz 调度器示例
于 2013-02-06T04:37:40.493 回答
1
servlet是不适合这项工作的工具。它旨在对 HTTP 请求采取行动,仅此而已。您只需要一个每天运行一次的后台任务。您不能期望最终用户应该在那个时刻触发 HTTP 请求以触发“后台作业”。
除了许多其他人提到的遗留 Quartz 库(显然挂在遗留 J2EE 时代),您还可以只使用为此提供的标准 Java SE API ScheduledExecutorService
。这需要通过这样的简单方式启动ServletContextListener
:
@WebListener
public class Scheduler implements ServletContextListener {
private ScheduledExecutorService scheduler;
@Override
public void contextInitialized(ServletContextEvent event) {
scheduler = Executors.newSingleThreadScheduledExecutor();
long millisUntil12PM = calculateItSomehow();
scheduler.scheduleAtFixedRate(new SendEmail(), millisUntil12PM, 1, TimeUnit.DAYS);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
scheduler.shutdownNow();
}
}
类SendEmail
看起来像这样:
public class SendEmail implements Runnable {
@Override
public void run() {
// Do your job here.
}
}
就这样。无需弄乱传统的第 3 方库。
于 2013-02-06T13:33:28.830 回答