我需要使用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方法,而控制器方法应该有权访问该实例。
任何建议都将不胜感激。提前谢谢。