2

私は次のことをしているエンジンに取り組んでいます:

  1. DBからデータプロバイダー情報を取得します(データを取得するために接続するデータベースとスキーマの詳細を教えてくれます)
  2. その情報を使用してデータベースに接続し、後で XML コンテンツを作成するために使用するデータを取得します。

データベース接続管理を処理および分離するための標準的なセットアップは、DataSource Bean (Spring を使用してコンポーネントを配線しています) を作成し、それを ProviderConfigDao (接続構成をロード) および ContentDao (以前にロードされた接続の詳細を使用してデータをロード) に注入することです。 . これにより、接続の処理が実際のコードから適切に分離されるため、DAO クラスは、接続がいつどのように作成/オープン/クローズされるかを知る必要がありません。

残念ながら、このセットアップは機能しません。接続を作成するときに、データベース スキーマを指定できるようにする必要があるためです。最初からすべての異なるスキーマを知っているわけではないため、それらすべてをカバーする一連の DataSource オブジェクトを作成することはできません。したがって、DataSource オブジェクトは実行時に作成する必要があり、その作成はユーザーから隠されています。

私が考えることができる唯一の解決策は次のとおりです。

  1. 1 つのメソッドを持つ別のクラス/インターフェイス (DataSourceProvider) を用意します。

    //Gets the connection URL as parameter (which includes the schema name).
    DataSource getDataSource(String url);
    
  2. Spring 構成に Bean を追加して、各スキーマの DataSource オブジェクトの作成を管理するカスタム実装を提供します。
  3. DataSource オブジェクトの代わりに、そのオブジェクトを DAO クラスに挿入します。

それは悪い解決策ではありませんが、オープンソースパッケージですでにこのようなものがサポートされているのではないかと思っていました...すでに完了してテストされたものを使用してから、車輪を再発明したいと思います。

乾杯、ステフ。

4

1 に答える 1

0

org.springframework.jdbc.support.JdbcUtils データベースパラメータからすべてのメタデータを取得する JDBC Utils があります。

  1. 情報源
  2. の実装org.springframework.jdbc.support.DatabaseMetaDataCallback
于 2011-11-22T19:21:47.493 に答える