通过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的情况下,您已关闭用于获取DatabaseClientDatabaseClient实例。因此,以下示例将强制触发此错误:

    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实例通常应在应用程序的整个生命周期中都有效。仅当您确定不再与数据库进行任何进一步的交互时,才应关闭它。

09-16 05:36