调度程序任务应仅放在Global类中。创建两个任务,仅使用
initialDelay= 0毫秒首先安排一次。
对于第二项任务,您需要使用通用的日期/时间类来计算当前日期时间与下一个计划的发生时间(即明天的8:00)之间的秒数,然后将此差值
initialDelay设置
frequency为24小时。
结果,它将在应用程序启动时启动,并将安排任务在每天的规定时间执行。
编辑
有完整的示例(保存/编辑类:)
/app/Global.java:
import akka.util.Duration;import org.joda.time.DateTime;import org.joda.time.Seconds;import play.Application;import play.GlobalSettings;import play.Logger;import play.libs.Akka;import java.util.concurrent.TimeUnit;public class Global extends GlobalSettings { @Override public void onStart(Application application) { Akka.system().scheduler().scheduleonce( Duration.create(0, TimeUnit.MILLISECONDS), new Runnable() { @Override public void run() { Logger.info("ON START --- " + System.currentTimeMillis()); } } ); Akka.system().scheduler().schedule( Duration.create(nextExecutionInSeconds(8, 0), TimeUnit.SECONDS), Duration.create(24, TimeUnit.HOURS), new Runnable() { @Override public void run() { Logger.info("EVERY DAY AT 8:00 --- " + System.currentTimeMillis()); } } ); } public static int nextExecutionInSeconds(int hour, int minute){ return Seconds.secondsBetween( new DateTime(), nextExecution(hour, minute) ).getSeconds(); } public static DateTime nextExecution(int hour, int minute){ DateTime next = new DateTime() .withHourOfDay(hour) .withMinuteOfHour(minute) .withSecondOfMinute(0) .withMillisOfSecond(0); return (next.isBeforeNow()) ? next.plusHours(24) : next; }}


