2012-04-15 9 views
4

私はHibernat 4に基づいてマルチテナントアプリケーションを開発しています。 私は別のデータベースソリューションを使用しています。 データベースプロバイダーとしてMysqlを使用します。 新しいテナントごとに、mysqlに新しいデータベースを追加します。 アプリケーションサーバーを再起動せずに、新しいテナントをアプリケーションに追加したいと考えています。 DriverManagerDataSourceを使用して、テナントごとに新しいデータソースを作成しますが、このクラスは本番環境では使用できません。どのクラスを使うべきですか? 私はappserverにデータソースを追加し、JNDIdatasourceを使用することを考えていましたが、問題は新しいテナントごとにアプリケーションサーバーを再起動する必要があることです。 appserverを再起動せずにデータソースを追加する方法はありますか?マルチテナントアプリケーションのデータソース

+1

これはあなたを助けるでしょう:http://blog.springsource.org/2007/01/23/dynamic -datasource-routing/ –

+0

一般的には良い設計ではありません新しいユーザー/テナントなどごとにデータベースを作成してください。パーティション化された単一のデータベースを使用することを考えてみてください。http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html – samlewis

答えて

2

あなたの質問に直接答えを与えるために、JMXを介してアプリケーションコンテキストを公開し、プログラムで修正することができます。この問題は、変更が一時的なものになること、つまりサーバーを再起動しても変更が保持されないことにあります。

もう1つの方法は、(xmlを使用していると仮定して)基礎となるxmlファイルをプログラムで変更し、アプリケーションコンテキストでrefresh()を呼び出すことです。たとえば、あなたがデータソースのプレースホルダとVelocityテンプレートを作成することができます。

<beans> 
... 
#foreach ($datasource in $datasources) 
    $datasource 
#end 
... 
</beans> 

あなたはその後、その後、更新されたデータソース-のcontext.xml

を生成することになる速度にすべての必要なデータソースのリストを渡しますしかし、他のユーザーが指摘しているように、これは実際には良いアイデアではないので、分割や別の方法で行く方が良い

関連する問題