如何在 Cloud Spanner 中为企业应用程序创建连接池

How to create Connection Pooling in Cloud Spanner for the Enterprise applications

我是 Cloud Spanenr 的新手。我已经了解如何创建连接(dbClient)并用于事务和 executeQuery/mutations 其他。 但我不清楚如何为 Cloud Spanner 创建 ConnectionPooling 好吧,有 SpannerOptions,Session/SessionPoolOptions。只需创建

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

将处理企业应用程序所需的连接池。

是否有正确的方法来创建 JDBC/Hibernate 样式的连接池,我们将连接对象形式的池和 return 池化以再次重用,而不是多次创建连接。

我已经创建了连接对象并创建了所有类型的事务,包括查询和变更以及其他过程。我正在创建一个集中式库来为多个 dao 提供连接(dbClient)。无法获得适当的文档或流程来为 Cloud Spanner

实现 JDBC/Hibernate 风格的连接池 class
 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;

目前,我正在尝试在需要连接时对每个 Dao 方法重复相同的操作。我希望创建一个集中式 class 来提供此连接形式的连接池,并 return 它用于池以供恢复。

在 Cloud Spanner 中,与数据库的长期“连接”/“通信通道”由“Session" and not a DatabaseClient object. The DatabaseClient object already implements connection(session) pooling internally in a SessionPool object which can be configured via SessionPoolOptions.

建模

如果您想管理自己的会话,而不是给每个 DAO 对象一个 DatabaseClient 对象(或 class 包装它),您可以初始化自己的 SessionPool 并给他们每个人一个 Session 对象(或一个 class 包装它)。