У меня есть проект playframework, и я добавил в него библиотеку Firebase. Требуется инициализация Firebase перед использованием. Итак, я создал этот код:
class Module extends AbstractModule with ScalaModule {
override def configure(): Unit = {
bind[Init].asEagerSingleton()
}
}
class Init @Inject()(
//some deps here
)(implicit val ec: ExecutionContext) {
val options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.build()
FirebaseApp.initializeApp(options)
}
И после run
он работает нормально в первый раз, но после автоматической перезагрузки (некоторые изменения кода) я получаю эту ошибку:
java.lang.IllegalStateException: FirebaseApp name [DEFAULT] already exists!
at global.Init.<init>(Init.scala:17)
потому что sbt пытается инициализировать Firebase, но он уже инициализирован.
Я решил это так:
class Init @Inject()(
//some deps here
)(implicit val ec: ExecutionContext) {
try {
FirebaseApp.getInstance()
} catch {
case e: IllegalStateException =>
val options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.build()
FirebaseApp.initializeApp(options)
}
}
Но, может быть, у кого-то есть более элегантное решение?