【问题标题】:java - How to send e-mail at a certain time? [duplicate]java - 如何在特定时间发送电子邮件? [复制]
【发布时间】:2012-01-16 08:45:19
【问题描述】:

我正在使用 tomcat 7.0 开发 Java 应用程序 (JSF 2.0)。我需要在每天的某个时间发送一封电子邮件。我将使用 JavaMail 发送电子邮件,但是如何让它每天在特定时间发送电子邮件。说中午。?

非常感谢所有帮助!

【问题讨论】:

  • 你可以访问服务器的 cron 调度器吗?
  • Dimme,idk ----planetJOnes,我一定会调查那个 SO 问题,谢谢
  • 使用 crontab 或调度程序我不希望包含额外的程序,除非需要

标签: java jsf jakarta-mail tomcat7


【解决方案1】:

最好和灵活的解决方案是使用 Quartz Scheduler。您只需要根据您的指定要求创建一个 Job 和一个触发器,然后就完成了。

详细参考官方文档

Quartz-Scheduler-Tutorials

【讨论】:

  • 我正在研究 Quartz,谢谢!
【解决方案2】:

由于 Tomcat 是一个简单的 servletcontainer,它不提供内置调度工具,也不支持非常方便的 EJB @Schedule 注释,因此您需要自己管理调度,或者使用 Quartz 等第三方库,或者只需将作业委托给底层操作系统平台的调度工具,例如基于 Windows 的平台中的任务调度程序和基于 Unix 的平台中的 Cron。

使用标准 API 时,您可以使用 ServletContextListener 在启动时初始化调度程序,您可以使用 ScheduledExecutorService 作为调度程序。

这是一个启动示例:

@WebListener
public class Config implements ServletContextListener {

    private ScheduledExecutorService scheduler;

    @Override
    public void contextInitialized(ServletContextEvent event) {
        long secondsUntilNoon = calculateItSomehow();
        long secondsPerDay = 60 * 60 * 24;
        scheduler = Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(new Mailer(), secondsUntilNoon, secondsPerDay, TimeUnit.SECONDS);
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        scheduler.shutdownNow();
    }

}

Mailer 类看起来像这样:

public class Mailer implements Runnable {

    @Override
    public void run() {
        // Do your mailing job here.
    }

}

另见:

【讨论】:

  • 谢谢巴鲁斯,我一直很喜欢你的回答,因为你似乎总是给出一些代码来开始。我希望你不要认为这是懒惰,只是我总是喜欢有一些东西开始。我很感激帮助。现在,我已经这样做了,这正是我所需要的。它工作得很好,所以只要应用程序在服务器上运行正确,它就可以工作吗?
  • 不客气。没错。
【解决方案3】:

【讨论】:

    【解决方案4】:

    您可以按照 Umesh 的建议安排您的 Quartz 调度程序的电子邮件,您可以使用以下代码开始:

    //set quartz properties in propreties file or map
    
    SchedulerFactory schedFact = new StdSchedulerFactory();
    
    Scheduler sched = schedFact.getScheduler();
    
    //set these parameters
    JobDetail jobDetail = new JobDetail( "Email Job" , Scheduler.DEFAULT_GROUP , MyEmailAction.class );
    
    //add data or objects you may require in your scheduled job
    JobDataMap dataMap = jobDetail.getJobDataMap();
    
    dataMap.put("mydata", myDataObj);
    
    SimpleTrigger st = new SimpleTrigger();
    
    st.setName("DeployTrigger");            
    
    //set the time when you want to send email
    
    st.setStartTime( java.util.Date );
    
    sched.scheduleJob( jobDetail , st  );
    
    sched.start();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2013-10-15
      • 2015-04-29
      • 1970-01-01
      • 2013-12-02
      • 2012-11-14
      相关资源
      最近更新 更多