我正在使用tomcat 7.0开发Java App(JSF 2.0)。我需要每天在卡塔恩时间发送一封电子邮件。我将使用JavaMail发送电子邮件,但如何让它在特定时间每天发送电子邮件。中午说。
任何和所有帮助都有很大帮助!
答案 0 :(得分:2)
最佳和灵活的解决方案是使用Quartz Scheduler。您需要的是根据您的指定要求创建一个Job和一个触发器,然后就完成了。
详情请参阅官方文件
答案 1 :(得分:1)
由于Tomcat是一个简单的servlet容器,它不提供内置的调度工具,也不支持非常方便的EJB @Schedule
注释,您需要自己管理调度,或者使用第三方库,如Quartz ,或者只是将作业委托给底层操作系统平台的调度工具,例如基于Windows的平台中的Task Scheduler和基于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.
}
}
答案 2 :(得分:0)
您可以使用计时器任务 http://www.ibm.com/developerworks/java/library/j-schedule/index.html
或Quartz调度程序 http://www.quartz-scheduler.org/download/
答案 3 :(得分:0)
您可以按照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();