2016-08-04 7 views
1

私は特定の日に実行する必要があるスレッドを持っていると、毎月の1日と言うことができます。 Akka Schedulerを使用しているので、Akkaで実行できるかどうかを知りたいだけです(クォーツスケジューラでこの問題を簡単に解決できます)。Akkaスケジューラの特定の日にJObをスケジュールします

Akkaスケジューラのスケジュール機能でわかります再起動時間もパラメータに渡します。しかし、この特定の日付の場合、再起動の時間は同じではありません。なぜなら、ある月は30日、31日などですからです。 そのため、再起動時間が経過するたびにスケジューラが実行されます。

Cron Expression: cron_expression=0 0 06 1 * ? 
restart_time =86400 (here it is 24 hours) 

Akka.system().scheduler().schedule(validCronExpressionTime, Duration.create(restart, TimeUnit.SECONDS), thread, Akka.system().dispatcher()); 

ここで、validCronExpressionTimeは、ファイルのcron_expression設定に基づいて有効な日付を検出します。

akkaスケジューラで最初のarugumentは、再起動時間に基づいて繰り返される特定の時間にスケジューラを開始するためのものです。

+0

以下の回答はあなたを助けましたか? –

+0

こんにちは、あなたのコードは月の1日にスレッドを1回だけ実行するようですが、毎月1日に実行したいと考えています。 –

+0

いいえ、これは月の最初の日付に実行されます。毎月最初に実行するこのコードをあなたの俳優の中に入れる必要があります。他の質問が発生したかどうか尋ね続ける。 –

答えて

0

俳優を作成し、Test俳優を作成し、メインクラスとその俳優の中から、以下のコードを使用して教えてください。

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.DATE, 1); 
cal.add(Calendar.MONTH, 1); 

Calendar cal2 = Calendar.getInstance(); 

long duration =(cal2.getTimeInMillis()-cal.getTimeInMillis())/1000; 

ActorRef testActorRef = getContext().actorOf(Props.create(Test.class)); 
getContext().system().scheduler().scheduleOnce(Duration.create(duration, TimeUnit.SECONDS), testActorRef, messege, getContext().system().dispatcher(), null); 
+0

質問があれば教えてください。 –

関連する問題