У меня есть требование создать микросервис с помощью 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, и метод контроллера должен иметь доступ к этому экземпляру.
Любое предложение будет высоко ценится. Заранее спасибо.