2012-03-08 73 views
2

我想知道安排代碼的最佳方法。我有一個代碼可以生成報告並以24小時爲間隔向一組人發送郵件。它是基於控制檯的Java應用程序。我想知道安排這個最好的方法。有時我可能需要將其更改爲12小時。但是,該應用程序在間隔之間不執行任何其他任務。以24小時爲間隔計劃

+0

你使用什麼系統? – kaupov 2012-03-08 13:02:36

+0

應該是系統獨立的。可能是Linux或Windows。 – 2012-03-08 13:03:10

回答

5

這裏有一些方法,從最簡單到最全面:

  1. sleep()

    TimeUnit.HOURS.sleep(24) 
    

    這種做法很簡單,做的工作和睡眠24小時。事實上,這樣會更復雜一些,因爲報告需要一些時間,所以你不得不稍微休息一下。以下所有解決方案都透明地處

  2. java.util.Timer#scheduleAtFixedRate() - 簡單的內置Java解決方案。

  3. @Scheduled@Schedule的註釋 - 更復雜但更強大,例如,接受表達式:

    @Scheduled(fixedRate=DateUtils.MILLIS_PER_DAY) 
    public void generateReport() { 
        //... 
    } 
    
  4. - 全面成熟的Java調度與集羣和故障轉移,失火的處理,充分支持等非常全面的:

    newTrigger(). 
        withSchedule(
        simpleSchedule(). 
         withIntervalInHours(24). 
         repeatForever() 
        ).build(); 
    

    newTrigger(). 
        withSchedule(
        cronSchedule(). 
         dailyAtHourAndMinute(17, 30). //17:30 
        ).build(); 
    
0

我使用的方法有兩種:

首先對於像客戶端代碼的非託管代碼: Chron4J

二是在JavaEE的framewoks implmented。當您使用像Glassfish/JBoss這樣的容器時,您可以通過註釋方法使用它。會是這樣的:

@Schedule(second="*/1", minute="*",hour="*", persistent=false) 
public void doWork(){ 
    System.out.println("timer: " + helloService.sayHello()); 
} 
0

我會看看石英調度器,如果我是你。 我在很多應用程序中使用,它非常易於使用。 你可以在這裏找到更多的信息:http://quartz-scheduler.org/

如果您使用的彈簧組我肯定會推薦它,因爲它是超級容易用XML配置,讓春天注入所有的東西給你。

0

那麼,如果程序可以idl Ë嘗試這樣的事情

try 
{ 
for (;;) { 
    //code 
    Thread.sleep(1000 * 60 * 60 * 24); 
    //code 
    } 
} 
catch(Exception e) 
{ 
    System.out.println(e); 
}