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

时间:2018-12-30 04:42:19

标签: google-cloud-platform connection-pooling google-cloud-spanner

我对Cloud Spanenr很陌生。我已经知道可以创建connection(dbClient)并用于事务和executeQuery / mutations其他。 但是我不清楚如何为Cloud Spanner创建ConnectionPooling 嗯,还有SpannerOptions,Session / SessionPoolOptions。只需创建

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

将处理企业应用程序所需的connectionPooling。

是否存在创建JDBC / Hibernate风格的正确连接池的方法,只要我们采用连接对象的形式“池”并返回池以再次使用,而不是多次创建连接即可。

我已经完成了创建连接对象的工作,并创建了具有查询,变异和其他过程的所有类型的事务。我正在创建一个集中式库来提供多个dao的连接(dbClient)。无法获得适当的文档或过程来实现Cloud Spanner的Connection Pooling类的JDBC / Hibernate风格

 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 Mathod重复相同的操作。我正在寻找创建一个集中的类来提供此连接表单连接池,并将其返回给池以供继续使用。

1 个答案:

答案 0 :(得分:3)

在Cloud Spanner中,数据库的长期“连接” /“通信通道”由“ session”而非id对象建模。 DatabaseClient对象已经在SessionPool对象中内部实现了连接(会话)池,该对象可以通过SessionPoolOptions进行配置。

如果您要管理自己的会话,而不是将DatabaseClient对象(或包装它的类)提供给每个DAO对象,则可以初始化自己的DatabaseClient并分别给它们Session对象(或包装它的类)。