我正在开发基于Hibernat 4的多租户应用程序。 我使用单独的数据库解决方 我使用Mysql作为数据库提供程序。 对于每个新租户,我向mysql添加一个新数据库。 我想在不重新启动应用程序服务器的情况下向我的应用程序添加新租户。 我使用DriverManagerDataSource为每个租户创建一个新的数据源,但是这个类不打算在生产中使用?我应该使用哪一堂课? 我想将数据源添加到appserver并使用JNDIdatasource,但问题是我需要为每个新租户重新启动appserver。有没有办法在不重新启动appserver的情况下添加数据源?
答案 0 :(得分:1)
为了直接回答您的问题,您可以通过JMX公开您的应用程序上下文并以编程方式对其进行修改。这样做的问题是更改将是暂时的,即如果重新启动服务器,它们将不会保留。
另一种选择是以编程方式修改底层xml文件(假设您使用的是xml)并在应用程序上下文中调用refresh()。例如,您可以使用数据源的占位符创建速度模板:
<beans>
...
#foreach ( $datasource in $datasources )
$datasource
#end
...
</beans>
然后,您将所有必需数据源的列表传递给velocity,然后生成更新的datasource-context.xml
但正如其他用户指出这不是一个好主意,最好采用分区或其他方法