簡體   English   中英

Java/Spring 使用 Google Cloud firebase-admin 與 google-cloud-storage 沖突

[英]Java/Spring using Google Cloud firebase-admin conflicts with google-cloud-storage

我一直在使用 firebase-admin sdk 來驗證對 springboot 上運行的簡單 REST api 的所有請求。

之前的依賴只有:

<dependency>
    <groupId>com.google.firebase</groupId>
    <artifactId>firebase-admin</artifactId>
    <version>8.2.0</version>
</dependency>

結果很好,我使用這個類進行了初始化:

@Service
public class FirebaseInitialization {
    public FirebaseInitialization() {
    }

    @PostConstruct
    public void initialization() {
        try {
            InputStream inputStream = this.getClass().getResourceAsStream("/serviceAccountKey.json");
            FirebaseOptions options = (new Builder()).setCredentials(GoogleCredentials.fromStream(inputStream)).build();
            FirebaseApp.initializeApp(options);
        } catch (Exception var3) {
            var3.printStackTrace();
        }

    }
}

現在我還想使用谷歌雲存儲客戶端庫來訪問存儲桶中的數據。 我添加了如下依賴:

<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-storage</artifactId>
    <version>2.8.1</version>
</dependency>

並嘗試初始化客戶端庫:

InputStream inputStream = this.getClass().getResourceAsStream("/serviceAccountKey.json");
Credentials credentials = GoogleCredentials.fromStream(inputStream);
Storage storage = StorageOptions.newBuilder().setCredentials(credentials).setProjectId("test").build().getService();

但是程序在啟動時崩潰並出現以下錯誤:

org.springframework.beans.factory.BeanCreationException:在類路徑資源[org/springframework/cloud/gcp/autoconfigure/firestore/GcpFirestoreAutoConfiguration.class]中定義名稱為“firestore”的bean創建錯誤:通過工廠方法進行的bean實例化失敗; 嵌套異常是 org.springframework.beans.BeanInstantiationException:無法實例化 [com.google.cloud.firestore.Firestore]:工廠方法“firestore”拋出異常; 嵌套異常是 com.google.cloud.firestore.FirestoreException: java.lang.IllegalStateException: getTransportChannel() 在 needsExecutor() 為真時調用

有趣的是,我可以通過刪除 firebase-admin sdk 或雲存儲客戶端庫之一來修復它。 我通過刪除 firebase-admin sdk 對此進行了測試,雲存儲客戶端庫運行良好。

這是因為他們都在訪問同一個憑據文件嗎? 到目前為止,我所知道的是,這不是權限問題,因為它們都可以彼此獨立地正常工作,問題出在我嘗試同時運行兩者時。 也許我需要設置一些配置才能同時擁有兩者?

感謝@Doug Stevenson 的回答。

我需要做的就是刪除雲存儲客戶端庫依賴項,像往常一樣繼續初始化 firebase,然后通過以下方式訪問存儲桶:

Storage storage = StorageClient.getInstance().bucket("test.appspot.com").getStorage();
BlobId blobId = BlobId.of("test", "products/"+productId+".jpg");
return storage.readAllBytes(blobId);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM