访问Java admin SDK Firestore实例的关闭选项
如果我使用由创建的Firestore实例向Firestore数据库写入大量数据访问Java admin SDK Firestore实例的关闭选项,java,google-cloud-firestore,Java,Google Cloud Firestore,如果我使用由创建的Firestore实例向Firestore数据库写入大量数据 GoogleCredentials myCredentials = GoogleCredentials.fromStream(new FileInputStream("/myPath/myCredentialsFile.json")); FirebaseOptions options = FirebaseOptions.builder()
GoogleCredentials myCredentials = GoogleCredentials.fromStream(new FileInputStream("/myPath/myCredentialsFile.json"));
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(myCredentials)
.setDatabaseUrl("https://myProject.firebaseio.com")
.build();
FirebaseApp app = FirebaseApp.initializeApp(options, "myFirebaseApp");
Firestore db = FirestoreClient.getFirestore(app);
,我收到了错误消息
java.lang.IllegalStateException: Firestore client has already been closed
不过,写少量的数据效果很好
如果我改为从FirestoreOptions创建Firestore实例,如
FirestoreOptions firestoreOptions = FirestoreOptions.getDefaultInstance()
.toBuilder()
.setProjectId("myProject")
.setCredentials(myCredentials)
.build();
Firestore fs = firestoreOptions.getService();
,我没有这个问题,即使是对于大量的数据。显然,db的一些默认设置会在一定时间或工作负载后关闭,而这些设置不会出现在firestoreOptions中
我尝试在FirebaseOptions中设置上述FirestoreOptions:
FirebaseOptions options = FirebaseOptions.builder()
.setFirestoreOptions(firestoreOptions)
.setCredentials(myCredentials)
.setDatabaseUrl("https://myProject.firebaseio.com")
.build();
,但我仍然收到相同的错误消息。因此,关闭设置似乎没有嵌入到firestoreOptions中,或者它们被创建db的最后一行中的一些默认值覆盖
那么,在调用db.close()之前,是否可以将db设置为不关闭?这很奇怪。两种方法都应返回相同的
Firestore
对象。你能补充一些关于如何复制问题的信息吗?它是事务还是只写?他们是连续写还是有空闲时间?@vitooh:有一个写列表,没有空闲时间。无论如何,我尝试将以下实例化的GRPCchannelProvider添加到firestoreOptions:实例化的GRPCchannelProvider channelProvider=实例化的GRPCchannelProvider.newBuilder().setKeepAliveTime(持续时间:秒(3600)).setKeepAliveTimeout(持续时间.of分钟(5)).build()代码>,但这并没有改变任何东西。@vitooh:这两个Firestore对象不同:fs不会绕过Firestore安全规则,而db会绕过。但是如果我用FirestoreOptions.newBuilder()
替换FirestoreOptions.getDefaultInstance().toBuilder()
,在创建fs时,它也会绕过安全规则。我认为您应该将此作为错误提出。我认为将是适当的链接