我试图安排一个Akka作业,当我的Play 2.2应用程序启动。调度控制器DBAction与预定Akka Runnable(在斯卡拉/播放2.2)
在它最简单的形式,这是我的代码如下所示:
import play.api.Application
import play.api.Play.current
import play.api.GlobalSettings
import play.api.Logger
import play.api.db.DB
import scala.concurrent.duration._
import play.api.libs.concurrent.Akka
import play.api.libs.concurrent.Execution.Implicits._
import scala.slick.driver.MySQLDriver.simple._
object Global extends GlobalSettings {
override def onStart(app: Application) {
lazy val database = Database.forDataSource(DB.getDataSource())
scheduleTheThing(app)
}
private def scheduleTheThing(app: Application) {
Akka.system.scheduler.scheduleOnce(1.minute, new Runnable {
override def run() {
Logger.info("running the thing!")
controllers.Application.runTheThing
}
})
}
}
正如你所看到的,我创建将在应用程序启动后执行1分钟新Runnable
。 Logger.info("Running the thing!")
被执行得很好......我能够看到“运行的东西!”在启动服务器1分钟后的应用程序日志中。然而,controllers.Application.runTheThing
似乎并没有得到所谓:
我“这是怎么回事!”日志语句永远不会显示,并且DBThing.doSomeDBStuff()
应该做的事情永远不会发生。奇怪的是,控制台或日志文件中没有错误。
如何从预定的runnable调用控制器DBAction?或者我应该如何重新调整我的调度程序,使其工作?任何帮助将不胜感激,谢谢。
只是日志消息的工作?如果是这样,您能否成功检索会话对象的对象ID? – sdanzig
@sdanzig,不会发生''发生了!''日志不起作用,所以我无法记录会话中的任何内容。 ''运行的东西!“'日志,但是,*显示...所以计划工作正常,但我没有以正确的方式调用控制器。 –