当前位置: 首页 > 知识库问答 >
问题:

Firebase Admin SDK无法从jar文件内部连接到数据库

杨志强
2023-03-14

我正在用Firebase开发一个Android应用程序,我决定用Firebase admin SDK创建一个简单的管理应用程序。使用IDE(IntelliJ IDEA)启动并通过Admin SDK连接到数据库工作正常,但在启动导出的.jar文件时,Admin SDK无法连接到数据库。要初始化与Firebase的连接,我使用以下(Kotlin)代码:

//Initialize the Firebase Admin SDK.
val serviceAccount = 
this.javaClass.classLoader.getResourceAsStream("fen/ftcConsole/control/flip-the-classroom-app-firebase-adminsdk.json")
    val options = FirebaseOptions.Builder()
        .setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
        .setDatabaseUrl("https://flip-the-classroom-app.firebaseio.com/")
        .setStorageBucket("flip-the-classroom-app.appspot.com")
        .build()
FirebaseApp.initializeApp(options)

//Get the connections to the database and the cloud storage.
database = FirebaseDatabase.getInstance()
storage = StorageClient.getInstance().bucket()

我添加了一些控制台输出,发现代码只是没有超过这一行:“数据库=FirebasDatabase.get实例()”。它只是挡住了线,什么也没发生。也没有引发异常。正如我所说的,这只发生在导出的jar文件中,当开始使用IDE时,一切工作正常,这使得测试非常困难。

使用IntelliJ和gradle创建. jar文件,将依赖项打包在. jar文件中并将其留在外部,从. jar文件内部或外部使用admin-key加载. json文件,问题总是会发生。

为了使用gradle创建.jar,build.gradle文件包含以下jar块:

jar {
   manifest {
       attributes 'Main-Class': 'fen.ftcConsole.gui.GUIStarterKt'
   }
   //adding project files/resources to the jar file
   from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}

“gradle jar”给了我一个. jar文件,所有的依赖和资源都正确地放在文件中。该应用程序还包含一个正确启动的JavaFX GUI。只有Firebase连接不起作用。当我使用应用程序插件而不是“gradle jar”时,也会发生同样的情况。

共有1个答案

焦同
2023-03-14

推荐的类别:

FirebaseCredentials

...

该类已被弃用。使用谷歌认证。

来自快速入门示例:

    public static void main(String[] args) {
        // Initialize Firebase
        try {
            // [START initialize]
            FileInputStream serviceAccount = new FileInputStream("service-account.json");
            FirebaseOptions options = new FirebaseOptions.Builder()
                    .setCredentials(GoogleCredentials.fromStream(serviceAccount))
                    .setDatabaseUrl(DATABASE_URL)
                    .build();
            FirebaseApp.initializeApp(options);
            // [END initialize]
        } catch (IOException e) {
            System.out.println("ERROR: invalid service account credentials. See README.");
            System.out.println(e.getMessage());

            System.exit(1);
        }

        // Shared Database reference
        database = FirebaseDatabase.getInstance().getReference();

        // Start listening to the Database
        startListeners();

        // Kick off weekly email task
        startWeeklyTopPostEmailer();
}

改用GoogleCredentials

 类似资料:
  • 我试图在我本地minikube集群上的一个简单示例中使用fabric8io/kubernetes-client,在这里我获得了一个pod的IP 是完成执行的pod的名称,如果执行则可见。 是一个kubernetes API主机,我从中获得该主机。 MiniKube只有1个节点。 Fabric8IO/Kubernetes-客户端版本为4.9.1 Java 11 我将此代码作为作业部署在的同一集群上。

  • 我正在尝试从Spring Boot应用程序连接到mySQL数据库。然而,当我试图运行它时,它显示出错误。 我如何解决这个问题? 错误 从我的文件中添加代码片段 pom。xml 应用属性 堆栈跟踪 我还没有在sql中手动创建表,因为我认为spring.jpa.hibernate.ddl-Auto=date应该这样做

  • 我创建了一个副本zookeeper+kafka集群,使用来自官方孵化器repo的官方kafka图表: 如果我进入动物园管理员舱: 我使用工具测试TCP连通性。我预计会出现通信错误,因为服务器没有使用HTTP,但是如果curl连都不能连接,我不得不用ctrl-C输出,那么TCP连接就不能工作了。 我可以通过访问本地pod: 但是通过服务名连接到Kafka pod不起作用,我必须ctrl-C curl

  • 我尝试创建一个TNS_ADMIN环境变量,如本链接中所述-TNSPING OK但是sqlplus给出了ORA-12154?但是当我尝试使用sqlplus连接到

  • 我一直在努力使用数据库URL概述部分提到的以下连接字符串从Spring Boot应用程序连接H2数据库: 我还尝试了许多不同的tcp(服务器模式)连接组合,但仍然出现错误,例如“连接中断:”java。网运行Spring Boot app时,SocketTimeoutException:连接超时:localhost:9092”。 那么,如何解决这个问题并通过服务器模式连接到H2数据库呢?

  • 我按照这里给出的步骤从外部Jenkins实例连接到openshift在线代理。然而,当我提供OpenShift凭据时,即使我似乎拥有正确的凭据,登录也无法通过。消息“无法请求https://openshift.redhat.com/broker/rest/domains:OpenShift Online(下一代)开发者预览版在这里!我们不会接受OpenShift Online(v2)平台上的新用户