2012-04-15 57 views
4

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

+1

也许这会帮助你:http://blog.springsource.org/2007/01/23/dynamic -datasource-routing/ – 2012-04-15 08:54:18

+0

这通常不是一个好的设计为每个新用户/租户使用数据库等。您可能想考虑使用具有分区的单个数据库:http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html – samlewis 2012-04-15 11:56:38

回答

2

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

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

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

你会再传给你所有需要的数据源,以速度的名单,然后这将产生一个更新的数据源-context.xml的

但正如其他用户指出,这是不是一个好主意,更好地去分区或其他方法

相关问题