バージョン
Play Framework 2.2.2
GlobalSettingsを継承して、onStartをoverrideさせることで実現できました。
package common import akka.actor._ import scala.concurrent.duration._ import play.api._ import play.api.libs.json._ import play.api.libs.concurrent._ import play.api.Play.current import play.api.libs.concurrent.Execution.Implicits._ import service.TwitterService import play.Logger object Global extends GlobalSettings { override def onStart(app: Application){ val actor = Akka.system.actorOf(Props(new TwitterService), "twitterservice") Akka.system.scheduler.schedule(0.milliseconds, 1.minutes, actor, "tick") } }TwitterServiceは↓に載せてあります。twitter4jを使って現在のtrendを取得する処理です。
Akkaに処理を渡す形になるのでActorを継承する必要があります。
Akka.system.scheduler.schedule(0.milliseconds, 1.minutes, actor, "tick")
は起動して0ミリ秒から1分置きにactorを動かして、actorに"tick"を送ります。
package service import twitter4j.Twitter import twitter4j.TwitterFactory import twitter4j.Trend import play.api.libs.concurrent.Akka import akka.actor._ import akka.actor.Actor._ import org.slf4j.LoggerFactory import play.Logger import twitter4j.conf.ConfigurationBuilder class TwitterService extends Actor{ def receive = { case i:Int => { Logger.error("aa") println("aa") } case msg:String => { Logger.error(msg) println(msg) getTrend(23424856) } case _ => { Logger.error("tetete") println("tetete") getTrend(23424856) } } def getTrend(place:Int):Array[Trend] = { var twitter = twitterFactory.getInstance() var trendsResources = twitter.trends() var trends = trendsResources.getPlaceTrends(place) for(trend:Trend <- trends.getTrends()){ println(trend.getName()) } } }def receiveにcase文で3つ処理を書きましたが、
"tick"を送っているので、case msg:Stringの処理が実行されます。
application.confのapplication.globalでGlobal.scalaの配置位置を指定できます
# Global object class # ~~~~~ # Define the Global object class for this application. # Default to Global in the root package. # application.global=Global application.global=common.Global
これでplay runで実行すると、1分置きにtwitterのtrendを取得しに行く処理が動きます。
参考URL
http://www.playframework.com/documentation/2.2.x/ScalaGlobal
http://stackoverflow.com/questions/20924195/play-framework-2-2-scala-onstart-doesnt-work
0 件のコメント:
コメントを投稿