访问Java admin SDK 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()

如果我使用由创建的Firestore实例向Firestore数据库写入大量数据

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时,它也会绕过安全规则。我认为您应该将此作为错误提出。我认为将是适当的链接