Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Поскольку вы не пометили свой вопрос каким-либо из перечисленного, hibernate, JPA, ORM, я предполагаю, что вы имеете дело с простым JDBC.

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

[Комплемент]

Вы также можете использовать фабрику DAO, реализацию шаблона Abstract Factory или Factory Method, в зависимости от того, что здесь подходит.

[Ссылка]

Ответ 2

Существует несколько способов добиться этого:

  • Если вы используете какой-либо контейнер Java EE, который поддерживает распределенную транзакцию, вы можете использовать там функциональность.
  • Если вы используете простой JDBC, вам необходимо будет поддерживать собственное соединение для каждой базы данных. Для JDBC:
    • Предоставить все сведения о подключении
    • У вас есть фасад, который дает вам желаемый объект, вызывая абстрактный общий DAO.
    • Имейте factory, который создает dao на основе подключения.
  • Используйте инструменты ORM, такие как Hibernate, где вы можете использовать конфигурацию для нескольких баз данных. Учебник.
  • Если вы используете Spring, вы можете настроить один источник данных для каждой базы данных. Docs

Шаблоны проектирования:

  • Facade Pattern - для скрытия сложности и использования нескольких баз данных.
  • Factory - Если вы сами управляете подключением к базе данных.
  • Singleton - для источников данных

Ответ 3

С помощью инструмента ORM, такого как Hibernate, вы можете обрабатывать несколько подключений. Вы можете указать каждое соединение в отдельном файле конфигурации и создать требуемое соединение, получив новый сеанс factory каждый раз.

Другим способом было бы использовать datasource и JNDI: Java, подключающиеся к нескольким базам данных

Я думаю, вы можете использовать комбинацию шаблона factory и шаблона Singleton для этой цели.

Ответ 4

Идеальный способ добиться этого - использование многомерной системы, такой как OLAP. Но посмотрите, можете ли вы создать представление из этих баз данных. Затем вам просто нужно запросить представление (т.е. Просто подключение к одной базе данных). Также вы можете использовать несколько соединений с базой данных, если хотите.

Ответ 5

очень просто:)

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();
}
}

Хороший внешний вид.