[英]Java `https.proxyHost` and `https.proxyPort` succeed then fail when using 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.