繁体   English   中英

如何初始化 firebase 托管在谷歌应用引擎上的 spring-boot 应用程序

[英]How can I initialize firebase a spring-boot application hosted on google app-engine

我正在开发一个使用 spring-boot 作为后端的应用程序,它将数据存储在 Firebase 实时数据库中。

当我在本地运行该应用程序并将数据保存到数据库时运行良好,但是当我在应用程序引擎上部署它时,当我使用 Postman 发送请求时,我不断收到此错误名称为 [DEFAULT] 的 FirebaseApp 不存在。

我已按照https://firebase.google.com/docs/admin/setup中描述的步骤设置项目。 我使用了服务帐户凭据,并在我的主要 java class 中引用了它们,如下所示:

FileInputStream serviceAccount =
            new FileInputStream("src/main/resources/credentials.json");



    FirebaseOptions options = new FirebaseOptions.Builder()
            .setCredentials(GoogleCredentials.fromStream(serviceAccount))
            .setProjectId("my project id")
            .setDatabaseUrl("my database url")
            .build();

    FirebaseApp.initializeApp(options);

我还尝试将路径保存为环境变量,如下所示:

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/credentials.json"

它仍然无法在应用程序引擎上运行。 有人救我

这是一个棘手的问题。 环境变量GOOGLE_APPLICATION_CREDENTIALS仅适用于 Google Cloud Engine 项目,不适用于 AppEngine。

一种解决方案是使凭证文件成为war的一部分并使用ServletContext.getResourceAsStream获取文件

我在 Maven 项目中使用此模式的一个示例。

  1. POM 文件使凭证文件成为 WAR 的一部分:https://github.com/yagnyam-in/sms-gateway-backend/blob/master/pom.xml#L262
  2. 在源代码中获取凭证: https://github.com/yagnyam-in/sms-gateway-backend/blob/master/src/main/kotlin/in/yagnyam/sms_gateway/services/FirebaseService.kt#L38

警告:如果您将此战争文件推送到任何人工站点,凭据文件将作为战争文件的一部分向所有人公开。

希望这可以帮助。

我终于想出了解决办法。 带来问题的是我打包和部署项目的方式。 每次我部署新版本时,app-engine 中的 jar 文件都没有更新,这是因为我使用的命令。 所以显示错误是因为我的第一个版本没有凭据。

未更新 jar 文件的命令:

mvn appengine:deploy

更新我的 jar 文件的命令:

mvn clean package appengine:deploy -P cloud-gcp

我希望它可以帮助别人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM