-2

我想在系统时钟达到下午 12 点时从 servlet 调用一个方法,并且该方法基本上通过电子邮件从数据库向用户发送一些数据。请任何人帮助我如何在 Java Servlet 中实现这一点。

4

2 回答 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 回答