2016-08-04 1 views
1

У меня есть поток, который нужно запускать в определенный день, если сказать, что это 1-й из каждого месяца. Поскольку мы используем Akka Scheduler от запуска, поэтому я просто хочу знать, можем ли мы это сделать Akka или нет. (Кварцевый планировщик может решить эту проблему легко.)Запланируйте JOb на определенную дату в Akka Scheduler

Я могу видеть в графике планировщика 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 scheduler первое средство является только для запуска планировщика в определенное время, после чего оно повторяется на основе времени перезапуска.

+0

ниже ответ помог вам или нет? –

+0

Привет, Amit кажется, что ваш код будет запускать поток 1-го числа только один раз, но я хочу запустить его 1-го числа каждого месяца. –

+0

Нет, это будет выполняться в каждую первую дату месяца, когда вам нужно поместить тот же самый код в свой актер, который вы хотите запустить каждый 1-й день. Продолжайте спрашивать, возникает ли какой-либо другой вопрос. –

ответ

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

дайте мне знать, если возникнут какие-либо вопросы. –