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

14

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

Ваш Ответ

5   ответов
7

hibernate, JPA, ORM, Я полагаю, ты имеешь дело с простым JDBC.

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

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

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

[Ссылка]

Очень хорошая реализация DAO и DAO Factory, по BalusC Core J2EE Patterns - возможно, от, но может дать некоторую идею.
но тогда как у тебя будет несколько дБ соединений? Ashish K Agarwal
@ munna: каждая реализация DAO будет знать свой источник данных. Adeel Ansari
3

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

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

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

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

1

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

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

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

0

1.Создать источник данных, чтобы попытаться подключиться к БД

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.Создайте класс DataBase, не забудьте закрыть все соединения в этой точке.

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

Хорошо выглядишь.

Похожие вопросы