2016-08-04 19 views
1

我有一個需要在特定日期運行的線程可以說它是每月的第一個日期。由於我們從開始使用Akka調度程序,所以我只想知道我們是否可以通過Akka來做到這一點(石英調度程序可以很容易地解決這個問題。)在Akka Scheduler的特定日期安排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日運行它。 –

+0

不,這將在每個月的第一個日期運行,您需要將相同的代碼放入您想要在每個第一個日期運行的演員。繼續詢問是否有其他問題出現。 –

回答

0

創建一個演員,說測試演員,並告訴它從你的主類和演員裏面,在接收使用下面的代碼。

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

如果出現任何問題,請告知我們。 –