Как создать несколько подключений к базам данных для разных баз данных в java

У меня есть приложение, которое использует четыре базы данных в разных географических местах. Все базы данных содержит таблицы и только имя базы данных отличается в зависимости от местоположения. Мне нужно создать несколько отчетов в моем приложении, которое использует данные из каждой базы данных. Каков был бы правильный способ создания этих подключений к базе данных из приложения java и есть ли подходящий шаблон дизайна для этой задачи, который я мог бы использовать?

5 ответов


как вы не пометили свой вопрос с любым из этого,hibernate, JPA, ORM, Я предполагаю, что вы имеете дело с простым JDBC.

сказав это, я предлагаю вам иметь слой DAO для работы с базовыми базами данных и оставить детали соединения конкретным реализациям. Вы можете настроить строки подключения в некоторых .properties файлы, допустим.

[дополнение]

вы также можете использовать DAO factory, реализацию абстрактная фабрика или завод Mathod рисунком, какой здесь подходит.

[ссылка]


есть несколько способов достичь этого:

  1. Если вы используете любой контейнер Java EE, который поддерживает распределенную транзакцию, вы можете использовать там функциональность.
  2. Если вы с простым JDBC, то вам придется поддерживать свое собственное соединение для каждой базы данных. Для JDBC:
    1. предоставить все детали подключения
    2. имеют фасад, который дает вам желаемый объект, вызывая абстрактный общий DAO.
    3. есть завод который создает dao на основе соединения.
  3. используйте инструменты ORM, такие как Hibernate, где вы можете использовать конфигурацию для нескольких баз данных. учебник.
  4. Если вы используете 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();
}
}

хороший взгляд.