在App启动时执行代码:使用scala播放API

时间:2018-05-09 21:14:37

标签: scala playframework playback

我需要使用scala创建一个微服务,在探索scalatra几天后,我切换回Play框架。 需要在App启动时从blob下载lucene索引,并将Index搜索器的对象返回给每个控制器,以便它在App中共享。我可以使用Guice DI从blob下载索引,即创建单例类并在Module中执行eagerSingleton绑定。但无法弄清楚如何将IndexSearcher对象返回到每个控制器类。

以下是我到目前为止编写的代码:

class ApplicationStart @Inject()(clock: Clock, appLifecycle: ApplicationLifecycle)  {
         Blob.fetch("influencers", "index")
}

class Module extends AbstractModule {

  override def configure() = {
    bind(classOf[ApplicationStart]).asEagerSingleton()

  }

@Singleton
class Controller @Inject()(cc: ControllerComponents) extends AbstractController(cc) {

  def get(name: String) = Action { request =>
      val reader = DirectoryReader.open(FSDirectory.open(Paths.get("index"), NoLockFactory.INSTANCE))
      val searcher = new IndexSearcher(reader)
      val resp = Searcher.searchIndex(name, searcher)
        Ok(resp.get.asInstanceOf[JsObject])
  }
}

要求是在App启动时创建indexSearcher实例,而不是在控制器中创建getName方法,而控制器方法应该有权访问该实例。

任何建议都将不胜感激。提前谢谢。

0 个答案:

没有答案