いくつかのリソースで示唆されているように、データベースごとに1つ必要な(厳密な)必要性について間違っている可能性があります。SessionFactory
動的データソースルーティング
明日すべてを読み直し(すべての詳細を正直に理解することはできませんでした)、そのような設定の意味を完全に理解するために少し時間がかかります(ただし、第2レベルのキャッシュが壊れることは明らかです) 。これについては後でまた説明します。
複数のユーザーをサポートするWebアプリを作成しています。各ユーザーは、H2を使用して独自のデータベースを持っています。すべてのデータベーススキーマは同じです。
これはどのように拡張されるのだろうか...何人のユーザーがいますか?H2をどのように実行しますか、どのモードですか?
そのため、ユーザーのデータベースをそのユーザーに関連付ける方法に固執しています。おそらくHTTPSessionで関連付けて、SpringのAbstractRoutingDataSourceを拡張しますか?
ユーザーごとに作成SessionFactory
し、ログに記録されたユーザーに関連付けて(ログインをキーとして使用して)、指定されたからMap
を取得する必要があります。のライフサイクルをHTTPセッションにバインドすることは(メモリを節約するために)良い考えのようですが、Springがここで非常に役立つかどうかはわかりません。私は間違っているかもしれませんが、クラスのバリエーションと完全にプログラム的なアプローチの方が簡単に見えます。ちなみに、ユーザーごとに複数の接続が必要になるかどうかはわかりません。Session
SessionFactory
SessionFactory
HibernateUtil
しかし、これはHibernateのキャッシュに影響しませんか?
どのキャッシュですか?
別の方法は、すべてのデータソースのスキーマが同じであっても、各データソースでSessionFactoryを使用することです...したがって、それは無駄だと思います。
ああ、それは無駄ですが、それはあなたがやりたいことです(ユーザーごとに1つのデータベース)。そして、あなたには選択肢がありません(SessionFactory
データベースごとに1つ必要です)。実際にユーザーごとに1つのデータベースが必要なのはなぜですか?これは賢明な決断だと思いますか?すでに示唆したように、これは多くの問題を意味し、適切に拡張できない、複雑さを増すなどです。単一のデータベースを使用してデータをユーザーに関連付けてみませんか?
とにかく、データソースの選択は動的である必要があります。新しいユーザーごとに独自のデータベースが作成されるため、コンテキストファイルで事前に構成することはできません。既存のフレームワーク/ソリューションはありますか?
私の知る限りではありません。それはまた、あなたがプログラム的にすべてをしなければならないと思う理由でもあります。
私はHibernateShardsについてあまり知りません、多分それはうまくいくでしょうか?
アプリケーションの動的なニーズを考えると、それがどのように役立つかわかりません。