2009-08-08 25 views
4

私は、DB2データベースを指すSpringデータソースを宣言しようとしています。現在、org.springframework.jdbc.datasource.DriverManagerDataSourceを使用して接続を設定していますが、データソースBeanのデータベースにデータベーススキーマを指定する方法が見つかっていません。誰も私にこれを手伝ってもらえますか?Springデータソースとデータベーススキーマ

答えて

10

問題は、スキーマを設定する標準的な方法はありません。各データベースには異なるメカニズムがあります。

回避するには、DBのURLの一部としてスキーマを設定することです...

DB2のためのURLは次のようになります。

jdbc:db2://SERVER_NAME:PORT/DATABASE:currentSchema=SCHEMA_NAME;

役立ちます希望を..

注意:セミコロンを必ず追加してください。 URLの最後には、URLが無効であるとのエラーが表示されます。また、最後には何もしないでください。存在します(空白ではありません)。

+0

最後の注記は、DB2のみです。 – gdrt

2

標準のSpring名前空間でこれを行う方法はありません。構成にスキーマを追加するrequestにロブ・ハロップの応答:一般的に

デコレータを経由してこれを行うには本当にエレガントでパフォーマンスの方法が存在しないので、この種の機能は、接続プールの中に押し込まれなければなりません。プールは、作成する接続ごとにスキーマを設定できますが、ここでは接続が取得されるたびに設定する必要があります。

設定でプロキシを設定する必要がある場合は、プロミッターがスキーマを指定できるようにするためのコードがいくつか含まれています。

+0

これは、c3p0を使用している場合のように、スキーマをプールに対してのみ指定できることを意味します。なぜなら、私はc3p0接続プールを使用しているときにスキーマを指定するためのリソースを見つけることができなかったからです。 – Barun

+0

申し訳ありませんC3p0を使用したことがないので、設定方法を推測しています –

+0

この場合、接続プールとはWebLogic、JBOSS、Glassfish、Tomcat、Jetty、 WebSphereは禁じられています。 – duffymo

0

接続がスキーマの所有者をユーザーとして使用する場合、その接続はその特定のスキーマを指します。 すなわちユーザーuser1がschema1という名前のデータベース・スキーマの所有者である場合、ユーザーuser1を使用してデータベースに接続すると、デフォルトで接続はschema1を指します。

春に提供されたUserCredentialsDataSourceAdapterを使用して、ログインしたユーザーに基づいて異なるスキーマに接続しました。これは、ユーザに基づく特定のスキーマを指し示すデータソースを提供する。これは、スレッドベースのログイン情報を使用します。各スレッドは、どのスキーマに接続するかを決定し、それに応じてユーザーに提供する必要があります。

関連する問題