2012-02-07 12 views
0
public ReportService() { 
     super(); 
     // TODO Auto-generated constructor stub 
     executorService = Executors.newSingleThreadScheduledExecutor(); 
     executorService.schedule(new Runnable() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       try { 
        exportToMailDaily(); 
       } catch (Throwable e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     }, 1L, TimeUnit.DAYS); 
    } 

実行方法exportToMailDaily()方法毎晩午後6時。私は混乱しています1L, TimeUnit.DAYSここ...これを行う方法。Javaで毎晩午後6時にメソッドを実行する方法は?

+0

Tomcat、JBossのようなudnerlyingアプリケーションsrevrを使用していますか? Springのようなフレームワークですか? UnixやWondows? – Hurda

+0

私はtomcat 6.0を使用しています –

答えて

4

Quartz frameworkをご覧ください。

+0

TimeUnitはこのシナリオでは動作しませんか? –

+1

TimeUnitでは "6pm"を指定できません。 –

4

最も簡単な方法は、LinuxのcronジョブまたはWindowsのスケジュールされたタスクを使用して、適切なタイミングでJavaプログラムを開始することです。

Java内での時間のテストは、複雑なアプローチのようです。

+0

これを達成する方法 –

+0

@RameshKはcronジョブのプライマーとcrontab(通常は/ etc/crontabにあります)を参照してください:http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/基本的には時間、日付などを指定し、その時間に実行するスクリプトです。あなたはこの時間内にその時点で実行するためにあなたのJavaプログラムを呼び出すことができます。 – Jack

+0

明白な欠点は、それが導入するプラットフォームの依存性です。 – aioobe

0

プログラムまたはサードパーティ製またはオペレーティングシステムスケジューラのいずれかを常時稼働させる必要があります。 javaでこれを行う方法はありません。

0

睡眠が必要な時間を計算し、それに応じてスリープします。たぶん睡眠を次の1時間に制限することがあるので、夏時間の計算に驚くことはありません。睡眠時間を再計算するために1時間に1回目を覚ますことはかなり安いです。

ノートパソコンをサスペンドして時計などを固定すると、おそらく同期が外れてしまいます。これらの問題がすべて解決されている確立されたユーティリティcronに固執することは良い考えです。

0

java.util.Timerを単純なスケジューリング作業に使用します。このためにエグゼキュータを直接使用する必要はありません。 Java Practices

幸運:

1

は、ここでそれを行う方法の素敵なウォークスルーです。

関連する問題