web-dev-qa-db-ja.com

javaで異なるデータベースに複数のデータベース接続を作成する方法

地理的に異なる場所にある4つのデータベースを使用するアプリケーションがあります。すべてのデータベースには同じテーブルが含まれ、データベース名のみが場所によって異なります。各データベースのデータを使用するアプリケーションでいくつかのレポートを作成する必要があります。 Javaアプリケーションからこれらのデータベース接続を作成する適切な方法は何でしょうか?私が使用できるこのタスクに適した設計パターンはありますか?

15
Harsha

質問にhibernateJPAORMのいずれのタグも付けていないので、プレーンJDBCを扱っていると思います。

そうは言っても、基礎となるデータベースを処理するDAOレイヤーを用意し、接続の詳細は特定の実装に任せることをお勧めします。一部の.propertiesファイルで接続文字列を構成できます。

[補足]

DAOファクトリー、抽象ファクトリーまたはファクトリーメソッドパターンの実装のいずれかをここで使用することもできます。

[リンク]

7
Adeel Ansari

これを実現する方法はいくつかあります。

  1. Java分散トランザクションをサポートするEEコンテナーを使用している場合は、そこで機能を使用できます。
  2. プレーンJDBCを使用している場合は、すべてのデータベースに対して独自の接続を維持する必要があります。 JDBCの場合:
    1. すべての接続の詳細を提供する
    2. 抽象汎用DAOを呼び出して目的のオブジェクトを提供するファサードを用意します。
    3. つながりをもとにダオを作る工場を持っています。
  3. 複数のデータベースの構成を使用できるHibernateなどのORMツールを使用します。 チュートリアル
  4. Springを使用している場合は、データベースごとに1つのデータソースを設定できます。 ドキュメント

デザインパターン:

  • ファサードパターン-複雑さと複数のデータベースの使用を隠すため。
  • ファクトリ-データベース接続を自分で管理する場合。
  • シングルトン-データソース用
4
mprabhat

HibernateなどのORMツールを使用すると、複数の接続を簡単に処理できます。各接続を個別の構成ファイルで指定し、毎回新しいセッションファクトリを取得することで必要な接続をインスタンス化できます。

他の方法は、データソースとJNDIを使用することです: Javaが複数のデータベースに接続しています

ファクトリーパターンとシングルトンパターンを組み合わせて使うといいと思います。

2

これを実現する理想的な方法は、OLAPのような多次元システムを使用することです。しかし、それらのデータベースからビューを作成できるかどうかを確認してください。次に、ビューをクエリするだけです(つまり、単一のデータベース接続)。また、必要に応じて、複数のデータベース接続を使用することもできます。

1

とても簡単です:)

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

よく見る。

0
hekomobile