java .lang.IllegalStateException: пул был закрыт - PullRequest
0 голосов
/ 25 марта 2020

Получение приведенного ниже исключения как для операций чтения, так и для записи в гаечный ключ Google через REST API

Создание экземпляра гаечного ключа, базы данных и таблиц вручную и попытка чтения и записи в таблицы гаечного ключа, получая эту ошибку. Хотел узнать, произошла ли эта ошибка из-за конфигурации или кода во время выполнения.

Помогите мне решить эту проблему

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]

1 Ответ

0 голосов
/ 25 марта 2020

Эта ошибка возникает из клиентской библиотеки 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 экземпляры обычно должны существовать на протяжении всего времени жизни вашего приложения. Вы должны закрыть его, только если уверены, что больше не будете взаимодействовать с базой данных.

...