我需要在
之类的特定时间向我的客户发送报告我每天都这样做:
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("context initiallized");
System.out.println("Starting timer");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 1);
calendar.set(Calendar.SECOND, 0);
Date alarmTime = calendar.getTime();
_timer = new Timer();
_timer.schedule(new AlarmTask(), alarmTime);
}
这是我执行日常任务的课程:
public class AlarmTask extends TimerTask {
public void run() {
// Do your work here; it's 00:01 AM!
}
}
当我在00:01 AM之后的任何时间启动tomcat时似乎工作正常但。在上午02:30说,一旦上下文加载我需要它就执行任务第二天表演......
我的代码有问题吗?
答案 0 :(得分:3)
为什么不使用QuartzSchedular http://quartz-scheduler.org/
答案 1 :(得分:2)
Calendar
模拟完整日期,因此您已安排过去。 Timer
将通过立即执行来响应。增加Calendar
上的日期。
答案 2 :(得分:1)
你看过Quartz了吗?它可以帮助您安排任务!
答案 3 :(得分:0)
我想你必须做Marko Topolnik上面所说的https://stackoverflow.com/a/14781326/2040095
但另外你还需要调用Timer类的方法“schedule”的3个参数形式,因为你需要每天发送这个报告而不是一天吗?
类似
_timer.schedule(new AlarmTask(), alarmTime, period );
其中期间为每日报告24小时。
答案 4 :(得分:0)
如果你在一个庞大的项目中这样做,我更愿意你去Quartz Schedular,因为它有一个用户界面来处理工作,创建和编辑工作。如果只是一个小的警报任务,必须定期执行批处理文件并将其添加到chron作业以便在特定的时间间隔内运行。
希望这会有所帮助..