私はスケジューラを作成し、起動時にデータベースにcron式を取得したいと考えています。しかし、私はエラー "java.lang.RuntimeExceptionをコンストラクターを注入中にエラーが発生しました:開始されたアプリケーションがありません"。Play Frameworkでアプリケーションを起動するとデータベースにアクセスするには?
私はこの問題はplay.api.Play.currentを使用していると思うが、私はDB.withConnection {暗黙的な接続=>
のためにそれを必要とする私は、DB接続を注入する必要がありますか?それ、どうやったら出来るの?または私は間違ったアプローチを使用していますか?ご意見をお聞かせください。
これは私がこれまで持っているものです。..
Application.conf
play.modules.enabled += "tasks.MyRecurrentTaskModule"
MyRecurrentTaskModule.scala
class MyRecurrentTaskModule extends AbstractModule {
override def configure() = {
bind(classOf[RecurrentTask]).asEagerSingleton()
}
}
@Singleton
class RecurrentTask @Inject() (actorSystem: ActorSystem, lifecycle: ApplicationLifecycle) {
lifecycle.addStopHook{() =>
Future.successful(actorSystem.shutdown())
}
// Error when I access db
val schedule = models.ScheduleTable.getSchedule(1)
...
}
ScheduleTable.scala
import play.api.db._
import play.api.Play.current
case class ScheduleTable (
...
) {
}
object ScheduleTable {
val scheduleParser = {
...
}
}
def getSchedule (ScheduleId: Int): Option[ScheduleTable] = {
DB.withConnection { implicit connection =>
SQL("""
select * from SCHEDULE_TABLE s
where s.ScheduleId = {sid}
""")
.on('sid -> ScheduleId)
.as(ScheduleTable.scheduleParser.singleOpt)
}
}
...