[英]how to write cron job in play framework 2.3
我正在使用Play 2.3.8(激活器)和Mongodb作为db
我在产品系列中有一些产品,每个产品都有有效期,一旦到期
我需要删除产品集合中的文档。
我正在计划编写cron作业来删除产品集合中的文档,这些文档将在特定时间每天运行。
我想我可以在java中使用像@ on,@ Everyvery这样的注释(我在java中编写代码,而不是在scala中编写代码)。 但当我用Google搜索时,我得到了一些插件,工具或解决方案
a) https://github.com/ssachtleben/play-plugins/tree/master/cron
b)Quartz Job schedule作为依赖玩2.3(激活器)
c)Akka异步工作(我不知道如何使用它,如何使用游戏,甚至我是Akka的新手)
我处于困惑状态,你能不能在下面给我建议
哪一个我可以用于我的要求?
我是否正确地完成了我的工作?
有什么东西可以在数据库级别完成我的工作吗? 提前致谢。
这可以使用Global Class完成,并且可以使用onstart方法。 https://www.playframework.com/documentation/2.5.x/JavaGlobal
下面给出编码的抽象视图。 希望这有帮助
public class Global extends GlobalSettings {
private Cancellable scheduler;
@Override
public void onStart(Application application) {
int timeDelayFromAppStartToLogFirstLogInMs = 0;
int timeGapBetweenMemoryLogsInMinutes = 10;
scheduler = Akka.system().scheduler().schedule(Duration.create(timeDelayFromAppStartToLogFirstLogInMs, TimeUnit.MILLISECONDS),
Duration.create(timeGapBetweenMemoryLogsInMinutes, TimeUnit.MINUTES),
new Runnable() {
@Override
public void run() {
System.out.println("Cron Job");
// Call a function (to print JVM stats)
}
},
Akka.system().dispatcher());
super.onStart(application);
}
@Override
public void onStop(Application app) {
scheduler.cancel();
super.onStop(app);
}
}
Akka.system().scheduler().scheduleOnce(
Duration.create(0, TimeUnit.MILLISECONDS),
new Runnable() {
public void run() {
Logger.info("ON START --- " + System.currentTimeMillis());
}
},
Akka.system().dispatcher()
);
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());
}
},
Akka.system().dispatcher()
);
Akka.system().scheduler().schedule(
Duration.create(0, TimeUnit.MILLISECONDS), //Initial delay 0 milliseconds
Duration.create(60, TimeUnit.SECONDS), //Frequency 30 minutes
new Runnable() {
@Override
public void run() {
Logger.info("creating the runnable");
Logger.info("EVERY 60 MInutes --- " + System.currentTimeMillis());
executeAllMongoAggregations();
}
},
Akka.system().dispatcher()
);
} Akka.system().scheduler().scheduleOnce(
Duration.create(0, TimeUnit.MILLISECONDS),
new Runnable() {
public void run() {
Logger.info("ON START --- " + System.currentTimeMillis());
}
},
Akka.system().dispatcher()
);
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());
}
},
Akka.system().dispatcher()
);
Akka.system().scheduler().schedule(
Duration.create(0, TimeUnit.MILLISECONDS), //Initial delay 0 milliseconds
Duration.create(60, TimeUnit.SECONDS), //Frequency 30 minutes
new Runnable() {
@Override
public void run() {
Logger.info("creating the runnable");
Logger.info("EVERY 60 MInutes --- " + System.currentTimeMillis());
}
},
Akka.system().dispatcher()
);
}
在播放中,cron的角色是通过Akka Scheduler完成的 - 尽管样本很简单 - 它是非常强大的工具。
更多详细信息可以在Akka的页面上找到,甚至可以在StackOverflow上找到,例如如何在Play 2.0.4中每天安排任务+ onStart()? - 这是2.0.4的示例,无论如何,您将能够轻松地将其转换为2.3.x.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.