Я работаю над механизмом, который выполняет следующие действия:
- получает информацию о поставщике данных из БД (которая сообщает мне, к какой базе данных и сведениям схемы подключаться для получения моих данных)
- используйте эту информацию для подключения к базе данных и получения моих данных, которые позже я буду использовать для создания некоторого содержимого XML.
Стандартной настройкой для обработки и изоляции управления подключением к базе данных будет созданиеBean-компонент DataSource (я использую Spring для подключения компонентов) и вставьте его в мои ProviderConfigDao (загружает конфигурацию соединения) и ContentDao (загружает данные с использованием ранее загруженных сведений о соединении).Это прекрасно изолирует обработку соединений от реального кода, поэтому классам DAO не нужно знать, как и когда соединение создается / открывается / закрывается и т. Д.
Эта установка, к сожалению, не работает, так каккогда я создаю свое соединение, мне нужно иметь возможность указать схему базы данных.Я не знаю всех различных схем с самого начала, поэтому я не могу создать набор объектов DataSource, чтобы охватить их все, поэтому объект DataSource должен быть создан во время выполнения, а его создание скрыто от пользователей.
Единственное решение, которое я могу придумать:
Иметь другой класс / интерфейс (DataSourceProvider), имеющий один метод:
//Gets the connection URL as parameter (which includes the schema name).
DataSource getDataSource(String url);
- Добавитьbean-компонент в конфигураторе Spring, чтобы обеспечить для него пользовательскую реализацию, которая управляет созданием объектов DataSource для каждой схемы.
- Добавление этого объекта в мои классы DAO вместо объекта DataSource.
Этонеплохое решение, но мне было интересно, есть ли такая поддержка уже в каком-то пакете с открытым исходным кодом ... Я бы предпочел использовать что-то уже готовое и протестированное, а затем заново изобретать колесо.
Cheers,Стеф.