Как создать пул соединений в Cloud Spanner для корпоративных приложений

Я довольно новичок в облаке Spanenr. Я понял, как создать соединение (dbClient) и использовать его для транзакций и выполнения других запросов / мутаций. Но я не совсем понимаю, как создать ConnectionPooling для Cloud Spanner, а есть SpannerOptions, Session/SessionPoolOptions. Просто создавая

 SpannerOptions options = SpannerOptions.newBuilder().build();
          Spanner spanner = options.getService();
DatabaseClient dbClient = spanner.getDatabaseClient(db);

будет обрабатывать ConnectionPooling, необходимый для корпоративных приложений.

Существует ли правильный способ создания пула соединений в стиле JDBC/Hibernate, где мы принимаем объект соединения из пула и возвращаемся в пул для повторного использования, вместо того, чтобы создавать соединения многократно.

Я сделал создание объекта подключения и создать все типы транзакций с запросами и мутациями и другим процессом. Я нахожусь на уровне создания централизованной библиотеки для проверки соединения (dbClient) для нескольких дао. Невозможно получить надлежащую документацию или процесс для достижения стиля JDBC/Hibernate класса пула соединений для Cloud Spanner

 SpannerOptions options = SpannerOptions.newBuilder().build();
          Spanner spanner = options.getService();
            try {
              DatabaseId db = DatabaseId.of(options.getProjectId(),SpannerInstanceId, SpannerDatabaseId);

              String clientProject = spanner.getOptions().getProjectId();
              if (!db.getInstanceId().getProject().equals(clientProject)) {
                System.err.println(
                    "Invalid project specified. Project in the database id should match"
                        + "the project name set in the environment variable GCLOUD_PROJECT. Expected: "
                        + clientProject);
              }
              DatabaseClient dbClient = spanner.getDatabaseClient(db);
              dbClient
              .readWriteTransaction()
              .run(
                  new TransactionCallable<Void>() {
                    @Override
                    public Void run(TransactionContext transaction) throws Exception {
                        ResultSet resultSet;

В настоящее время я пытаюсь повторить то же самое для каждого метода Дао, когда требуется подключение. Я ищу, чтобы создать централизованный класс для предоставления этого пула соединений формы подключения и вернуть его для пула для продолжения.

1 ответ

Решение

В Cloud Spanner долгоживущее "соединение"/"канал связи" с базой данных моделируется сессией, а не DatabaseClient объект. DatabaseClient объект уже реализует пул соединений (сессий) внутри SessionPool объект, который можно настроить с помощью SessionPoolOptions,

Если вы хотите управлять своими собственными сессиями, вместо DatabaseClient объект (или класс, обертывающий его) для каждого из ваших объектов DAO, вы можете инициализировать свой собственный SessionPool и дать им каждому Session объект (или класс, обертывающий его).

Другие вопросы по тегам