4

我正在开发一个基于 Hibernat 4 的多租户应用程序。我使用单独的数据库解决方案。我使用 Mysql 作为数据库提供程序。对于每个新租户,我向 mysql 添加一个新数据库。我想在不重新启动应用服务器的情况下向我的应用程序添加一个新租户。我使用 DriverManagerDataSource 为每个租户创建一个新的数据源,但是这个类不打算在生产中使用?我应该使用哪个类?我正在考虑将数据源添加到 appserver 并使用 JNDIdatasource,但问题是我需要为每个新租户重新启动 appserver。有没有办法在不重新启动应用服务器的情况下添加数据源?

4

1 回答 1

1

为了直接回答您的问题,您可以通过 JMX 公开您的应用程序上下文并以编程方式对其进行修改。这样做的问题是更改将是暂时的,即如果您重新启动服务器,它们将不会持续存在。

另一种选择是以编程方式修改底层 xml 文件(假设您正在使用 xml)并在应用程序上下文中调用refresh() 。例如,您可以为数据源创建一个带有占位符的速度模板:

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

然后,您将所有所需数据源的列表传递给velocity,然后生成更新的datasource-context.xml

但是正如其他用户指出的那样,这确实不是一个好主意,最好使用分区或其他方法

于 2012-04-20T12:27:32.850 回答