我試圖安排一個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,不會發生''發生了!''日誌不起作用,所以我無法記錄會話中的任何內容。 ''運行的東西!「'日誌,但是,*顯示...所以計劃工作正常,但我沒有以正確的方式調用控制器。 –