Jdbc Connection Pooling - использование нескольких схем, известных только во время выполнения - PullRequest
2 голосов
/ 01 сентября 2011

Я работаю над механизмом, который выполняет следующие действия:

  1. получает информацию о поставщике данных из БД (которая сообщает мне, к какой базе данных и сведениям схемы подключаться для получения моих данных)
  2. используйте эту информацию для подключения к базе данных и получения моих данных, которые позже я буду использовать для создания некоторого содержимого XML.

Стандартной настройкой для обработки и изоляции управления подключением к базе данных будет созданиеBean-компонент DataSource (я использую Spring для подключения компонентов) и вставьте его в мои ProviderConfigDao (загружает конфигурацию соединения) и ContentDao (загружает данные с использованием ранее загруженных сведений о соединении).Это прекрасно изолирует обработку соединений от реального кода, поэтому классам DAO не нужно знать, как и когда соединение создается / открывается / закрывается и т. Д.

Эта установка, к сожалению, не работает, так каккогда я создаю свое соединение, мне нужно иметь возможность указать схему базы данных.Я не знаю всех различных схем с самого начала, поэтому я не могу создать набор объектов DataSource, чтобы охватить их все, поэтому объект DataSource должен быть создан во время выполнения, а его создание скрыто от пользователей.

Единственное решение, которое я могу придумать:

  1. Иметь другой класс / интерфейс (DataSourceProvider), имеющий один метод:

    //Gets the connection URL as parameter (which includes the schema name).
    DataSource getDataSource(String url);
    
  2. Добавитьbean-компонент в конфигураторе Spring, чтобы обеспечить для него пользовательскую реализацию, которая управляет созданием объектов DataSource для каждой схемы.
  3. Добавление этого объекта в мои классы DAO вместо объекта DataSource.

Этонеплохое решение, но мне было интересно, есть ли такая поддержка уже в каком-то пакете с открытым исходным кодом ... Я бы предпочел использовать что-то уже готовое и протестированное, а затем заново изобретать колесо.

Cheers,Стеф.

1 Ответ

0 голосов
/ 22 ноября 2011

есть утилиты JDBC для получения всей метады из базы данных org.springframework.jdbc.support.JdbcUtils Параметры:

  1. DataSource
  2. Реализация org.springframework.jdbc.support.DatabaseMetaDataCallback
...