我对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重复相同的操作。我正在寻找创建一个集中的类来提供此连接表单连接池,并将其返回给池以供继续使用。
答案 0 :(得分:3)
在Cloud Spanner中,数据库的长期“连接” /“通信通道”由“ session”而非id
对象建模。 DatabaseClient
对象已经在SessionPool
对象中内部实现了连接(会话)池,该对象可以通过SessionPoolOptions
进行配置。
如果您要管理自己的会话,而不是将DatabaseClient
对象(或包装它的类)提供给每个DAO对象,则可以初始化自己的DatabaseClient
并分别给它们Session
对象(或包装它的类)。