Как создать пул соединений в 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
объект (или класс, обертывающий его).