如何在 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 包装它)。
我是 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 包装它)。