4

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

4

1 に答える 1

1

質問に対する直接的な回答を得るには、JMX を介してアプリケーション コンテキストを公開し、プログラムで変更することができます。これに関する問題は、変更が一時的なものになることです。つまり、サーバーを再起動すると永続化されません。

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

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

次に、必要なすべてのデータソースのリストを速度に渡し、更新された datasource-context.xml を生成します。

しかし、他のユーザーが指摘しているように、これは本当に良い考えではなく、パーティショニングまたは別のアプローチを使用することをお勧めします

于 2012-04-20T12:27:32.850 に答える