2

PostgreSQL に 3 つの同一のスキーマを持つ単一の DB があります。ここで、ロケール キー (ユーザー セッションに格納) に基づいて DB 操作用の特定のスキーマを選択する必要があります。これが動的データ ソース ルーティングに似ていることをどこかで見つけました。

これをSpringに実装する方法について何か考えがある人はいますか? とにかく、これはトランザクション管理に影響しますか? 可能であれば、サンプル コードを共有してください。

任意の提案をいただければ幸いです。ありがとうございます。それでは、お元気で。

4

2 に答える 2

1

単一の DB がある場合、動的な側面は接続プールに関連するべきではありません。すべての接続は単一のデータベース用です。必要なのは、トランザクションの開始後に適切なスキーマを動的に設定することだけです。

これは、次数が よりも高いいくつかのアスペクトを使用して実現できます<tx:annotation-driven />。この側面では、現在の接続を取得する必要があります。

DataSourceUtils.getConnection(dataSource)

次の PostgreSQL ステートメントを発行します (パラメーターについては、httpschema ://www.postgresql.org/docs/9.1/static/sql-set.html を参照してください)。

set schema 'schemaname-on-the-basis-of-session-parameter';

postgres でのスキーマの使用も参照してください。

トランザクション管理に関しては、トランザクションは物理的な接続とセッションに関連しています。反対側のスキーマは一種の名前空間であるため、トランザクション管理を変更する必要はありません。ユーザー要求処理中に各トランザクションの開始時に現在のスキーマを設定するだけです。

于 2012-06-20T10:12:58.003 に答える
1

このアプローチを使用することをお勧めします。

  • 最初に、Spring MVC 構成でセッションベースまたは変更インターセプターのいずれかでロケールインターセプターを定義します。
  • を使用LocaleContexHolderして、アタッチされたスレッドで現在のロケールを取得できるようになりました。
  • 参照ブログ投稿を使用して、動的ルーティング データ ソースを定義します。データ ソース ルーターのパラメーターはロケールから取得されます。を使用LocaleContextHolderしてロケールを決定し、それを使用して使用するデータ ソースを決定します。
于 2012-06-20T10:57:19.320 に答える