每天,每周,每月和每年调用一种方法

时间:2013-02-08 21:02:35

标签: java timer task alarm

我需要在

之类的特定时间向我的客户发送报告
  • 每天00:01 AM
  • 每周星期日00:01 AM
  • 在每个月的第1天
  • 在每年的第1天

我每天都这样做:

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说,一旦上下文加载我需要它就执行任务第二天表演......

我的代码有问题吗?

5 个答案:

答案 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作业以便在特定的时间间隔内运行。

希望这会有所帮助..