2013-02-08 126 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作業以特定間隔運行。

希望這會有所幫助..