Выполнение кода при запуске приложения: играть API с Scala - PullRequest
0 голосов
/ 10 мая 2018

У меня есть требование создать микросервис с помощью scala, и после нескольких дней изучения скалатры я переключаюсь на Play Framework. При запуске приложения необходимо загрузить индекс lucene из BLOB-объекта и вернуть объект средства поиска индекса на каждый контроллер, чтобы он был доступен в приложении. Я могу загрузить индекс из BLOB-объекта с помощью Guice DI, то есть создать одноэлементный класс и выполнить привязку 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])
  }
}

Требуется создать экземпляр indexSearcher при запуске приложения, а не создавать в контроллере метод getName, и метод контроллера должен иметь доступ к этому экземпляру.

Любое предложение будет высоко ценится. Заранее спасибо.

...