2013-02-08 124 views
0

我需要一个像调用的方法每一天,每星期,每月,每年

  • 在每天上午12点01
  • 每星期perticular定时到自动发送给我的客户报告在周日00 :上午01点
  • 在每月的第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!   
    } 
} 

它似乎做工精细当我在任何时间后上午12时01分启动tomcat说在凌晨02:30的任务在上下文加载后立即执行,我需要它在第二天执行...

他们的任何问题与我的代码?

回答

2

Calendar模型完整的日期,所以你已经安排在过去。 Timer将通过立即执行来响应。在Calendar上增加一天。

1

你有没有看Quartz?它可以帮助你安排你的任务!

0

我想你也会有做马尔科Topolnik上述https://stackoverflow.com/a/14781326/2040095

但除了说做ü也需要调用的方法“时间表”为Timer类的3个参数形式,因为你需要这个报告被发送每一天,而不仅仅是一天?

因此,像

_timer.schedule(new AlarmTask(), alarmTime, period); 

其中将是每日报告24小时。

0

如果你在一个庞大的项目中这样做,我宁愿你去Quartz Schedular,因为它有一个用户界面来处理作业和创建和编辑作业。如果它只是一个小的警报任务,必须定期执行一个批处理文件并将其添加到chron作业以特定间隔运行。

希望这会有所帮助..