Java、camel、spring、shiro、c3p0、jpa を使用してアプリケーションを作成しました。このアプリケーションは、いくつかの Web サービスといくつかのデータベースに接続する必要があり、従来の spring プロパティ プレースホルダーと .prop プロパティ ファイルを使用した静的構成になりました。@Value アノテーションを使用して Java クラスにプロパティを挿入し、${} プレースホルダーを含む spring を使用してデータソースを定義します。構成には、Web サービスの URL、ユーザー名、パスワード、およびデータソースのデータベース、URL、ユーザー名、パスワードがあります。
ここで、動的/マルチ テナント構成を行う必要があります。つまり、各「顧客」は自分のパスワードのセットを持つことができ、これらのログイン/パスワードは時間の経過とともに変更される可能性があります. shiro を使用して Subject にデータを追加できるので、現在のプロパティを追加して、必要な場所に取得できます。しかし、どうすれば @value アノテーションを使い続けることができるでしょうか? そして、最も重要な質問ですが、実行時にデータソースのパラメーターを変更するにはどうすればよいですか? c3p0 のドキュメントで、新しいユーザー名とパスワードのペアで getConnection(username,password) を使用すると、新しいプールが作成され、古いプールが閉じられることがわかります。しかし、EntityManager だけがデータソースを使用するため、getConnection は使用しません。
私を助けてください!ありがとう、マリオ
多くの検索の後、私はこの方法でできると思います:
- プロパティには、コモンズ構成から DynamicCombinedConfiguration を使用しますが、Shiro サブジェクトからテナント ID を読み取るように指示する方法がわかりません
- JPAの場合、SpringからAbstractDataSourceを使用しますが、Shiro SubjectからテナントIDを読み取れるかどうかはわかりません
私が正しい方向を指しているかどうか教えてもらえますか?
ありがとう、マリオ