2012-03-08 27 views
2

私はコードをスケジュールする最良の方法を知りたい。私はレポートを生成し、24時間間隔で一連の人々にメールを送信するコードを持っています。コンソールベースのJavaアプリケーションです。私はそれをスケジュールする最良の方法を知りたい。時にはそれを12時間間隔に変更する必要があるかもしれません。ただし、アプリケーションはその間隔の間に他のタスクを実行しません。クライアントコードのような非マネージコードのためのスケジュールは24時間間隔で

まず::第二は、のJavaEE framewoksにimplmentedさ Chron4J

+0

どのようなシステムをお使いですか? – kaupov

+0

はシステムに依存しません。 LinuxまたはWindowsの可能性があります。 –

答えて

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

私は、次の2つの方法を使用しています。 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); 
}