通过REST API获取以下针对Google扳手的读写操作的异常
手动创建了扳手实例,数据库和表,并尝试读取和写入扳手表,出现此错误。想知道此错误是由于配置引起的还是由运行时的代码引起的。
帮我解决这个问题
java.lang.IllegalStateException:池已关闭
在com.google.cloud.spanner.SessionPool.getReadSession(SessionPool.java:834)〜[google-cloud-spanner-1.11.0.jar:1.11.0]
在com.google.cloud.spanner.DatabaseClientImpl.singleUse(DatabaseClientImpl.java:72)〜[google-cloud-spanner-1.11.0.jar:1.11.0]
最佳答案
此错误源自Spanner客户端库,而不是REST API。这表明在您仍在使用Spanner
的情况下,您已关闭用于获取DatabaseClient
的DatabaseClient
实例。因此,以下示例将强制触发此错误:
Spanner spanner = SpannerOptions.newBuilder()
.setProjectId("project-id")
.build()
.getService();
DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("project-id", "instance-id", "database-id"));
// Don't to this if you intend to use the DatabaseClient you just got on
// the previous line at a later moment.
spanner.close();
// The following line will trigger the error mentioned.
try(ResultSet rs = client.singleUse().executeQuery(Statement.of("SELECT * FROM FOO"))) {
while(rs.next()) {
System.out.println(rs.getCurrentRowAsStruct().toString());
}
}
Spanner
实例通常应在应用程序的整个生命周期中都有效。仅当您确定不再与数据库进行任何进一步的交互时,才应关闭它。