当我尝试使用类扩展GlobalSettings时,我需要每天在playframework2.0.4中执行一次代码。但是它适用于每个实例请求。我希望它在服务器启动时能正常工作,并且每天要执行1次工作。
package controllers;
import java.util.concurrent.TimeUnit;
import akka.util.Duration;
import play.Application;
import play.GlobalSettings;
import play.libs.Akka;
public class ParserJobApp extends GlobalSettings{
@Override
public void onStart(Application app) {
Akka.system().scheduler().schedule(Duration.create(0, TimeUnit.MILLISECONDS),Duration.create(6, TimeUnit.SECONDS), new Runnable() {
@Override
public void run() {
System.out.println("AAA --- "+System.currentTimeMillis());
}
});
}
}
这是我的控制器,从上面的课程开始
public class Application extends Controller {
public static Result index() {
ParserJobApp pr=new ParserJobApp();
pr.onStart(null);
System.out.println("sfsdfsdf");
return ok(index.render("Your new "));
}
}
调度程序任务应仅放在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;
}
}
我在Tomcat中部署了一个web应用程序。我有一套代码,它检查数据库中的某些数据,然后根据这些数据向用户发送邮件。有人能建议如何在Tomcat中安排这项工作吗。
问题内容: 我需要安排任务以固定的时间间隔运行。如何在长间隔(例如每8个小时)的支持下执行此操作? 我目前正在使用。是否支持长时间间隔? 问题答案: 使用:
问题内容: 我编写了一个Java程序,该程序使用Google Analytic API检索到目前为止的Google数据并将其导出为CSV文件。我希望该程序每天运行,以便CSV文件中的数据是最新的。我该如何实现? 问题答案: 您可以使用Windows Task Scheduler(请参阅教程)来启动任何程序。对于Java,您可能需要创建一个批处理文件来运行Java程序,然后使用Scheduler运行
问题内容: 如何每天在指定时间(例如上午11:00)使用运行任务?我正在使用JDK 1.4.2,我知道它很旧,但这是项目所需要的。 问题答案: Quartz是在Java环境中调度进程的最著名的解决方案,但是您有很多选择。检查此列表: Quartz 是一个开源作业调度系统,可以与几乎任何J2EE或J2SE应用程序集成或一起使用。Quartz可用于创建简单或复杂的时间表。 Jcrontab 旨在扩展并
问题内容: 我的Java Scheduler有一个问题,我的实际需要是我必须在特定时间启动我的进程,并且我将在特定时间停止,我可以在特定时间启动我的进程,但是我不能在特定时间停止我的进程,如何指定进程在调度程序中运行多长时间(在这里我不会放),任何人对此都有建议。 问题答案: 您可以使用带有2个计划的计划,一个计划运行任务,另一个计划终止任务-参见下面的简化示例:
问题内容: 我正在使用类,并且正在使用其schedule方法执行某些任务,但是在执行了6次之后,我必须停止其任务。 我该怎么办? 问题答案: 在某个地方保留对计时器的引用,并使用: 停止所做的一切。您可以将此代码放在要执行的任务中,static int以计算您经过的次数,例如