Как создать несколько подключений к базам данных для разных баз данных в java
У меня есть приложение, которое использует четыре базы данных в разных географических местах. Все базы данных содержит таблицы и только имя базы данных отличается в зависимости от местоположения. Мне нужно создать несколько отчетов в моем приложении, которое использует данные из каждой базы данных. Каков был бы правильный способ создания этих подключений к базе данных из приложения java и есть ли подходящий шаблон дизайна для этой задачи, который я мог бы использовать?
5 ответов
как вы не пометили свой вопрос с любым из этого,hibernate
, JPA
, ORM
, Я предполагаю, что вы имеете дело с простым JDBC.
сказав это, я предлагаю вам иметь слой DAO для работы с базовыми базами данных и оставить детали соединения конкретным реализациям. Вы можете настроить строки подключения в некоторых .properties
файлы, допустим.
[дополнение]
вы также можете использовать DAO factory, реализацию абстрактная фабрика или завод Mathod рисунком, какой здесь подходит.
[ссылка]
- очень тонкая реализация DAO и DAO Factory, by BalusC
- основные шаблоны J2EE -- возможно, датирован, но может дать некоторую идею.
есть несколько способов достичь этого:
- Если вы используете любой контейнер Java EE, который поддерживает распределенную транзакцию, вы можете использовать там функциональность.
- Если вы с простым JDBC, то вам придется поддерживать свое собственное соединение для каждой базы данных.
Для JDBC:
- предоставить все детали подключения
- имеют фасад, который дает вам желаемый объект, вызывая абстрактный общий DAO.
- есть завод который создает dao на основе соединения.
- используйте инструменты ORM, такие как Hibernate, где вы можете использовать конфигурацию для нескольких баз данных. учебник.
- Если вы используете Spring, то вы можете настроить один источник данных для каждой базы данных. Docs
Шаблоны Проектирования:
- шаблон фасада-для скрытия сложности и многократного использования базы данных.
- фабрика - в случае, если вы управлять подключение к базе данных самостоятельно.
- Singleton-для источников данных
идеальный способ достичь этого-использовать многомерную систему, такую как OLAP. Но посмотрите, можно ли создать представление из этих баз данных. Затем вам просто нужно запросить представление (т. е. только одно соединение с базой данных). Также вы можете использовать несколько подключений к базе данных, если хотите.
вы можете легко обрабатывать несколько соединений с помощью инструмента ORM, такого как Hibernate.. Каждое соединение можно указать в отдельном файле конфигурации и создать экземпляр требуемого соединения, получая каждый раз новую фабрику сеансов.
другой способ-использовать datasource и JNDI : Java подключение к нескольким базам данных
Я думаю, вы можете использовать комбинацию Заводского шаблона и Одноэлементного шаблона для этой цели.
очень легко :)
1.Создайте источник данных, чтобы попробовать подключиться к DB
public DataSource getDataSource(String db) throws Exception {
DataSource dt = null;
InitialContext ic = null;
try {
if(db.trim().equals("you_database_name")) {
dt = (DataSource)ic.lookup("jdbc/connection_name");
} else if(db.trim().equals("you_database_name")) {
dt = (DataSource) ic.lookup("jdbc/connection_name");
}
return dt;
} catch(NamingException n) {
throw new Exception("Err getDataSource (ServiceLocator) NamingException - " + n.getMessage());
}
2.Создайте базу данных класса, запомните закрыть все соединения в этой точке.
public class DataBases {
public YouNameDataSourceClass dataSrc;
public DataBases() throws Exception {
super();
dataSrc = new YouNameDataSourceClass.getDataSource();
}
public Connection getConnectionAS400() throws Exception {
return locator.getDataSource("you_database_name").getConnection();
}
public Connection getConnectionOracle() throws Exception {
return locator.getDataSource("you_database_name").getConnection();
}
public Connection getConnectionSQLServer() throws Exception {
return locator.getDataSource("you_database_name").getConnection();
}
}
хороший взгляд.