2016-08-04 51 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

如果出现任何问题,请告知我们。 –