多租户应用程序的数据源

4

我正在开发一个基于Hibernat 4的多租户应用程序。我使用独立的数据库解决方案,并且使用MySQL作为数据库提供者。对于每个新租户,我向mysql添加一个新的数据库。我希望能够在不重启应用服务器的情况下为我的应用程序添加一个新的租户。我使用DriverManagerDataSource为每个租户创建一个新的数据源,但这个类并不适用于生产环境。我应该使用哪个类呢?我想把数据源添加到应用服务器并使用JNDIdatasource,但问题是我需要为每个新租户重启应用服务器。是否有办法在不重启应用服务器的情况下添加数据源呢?


1
也许这个链接可以帮到你:http://blog.springsource.org/2007/01/23/dynamic-datasource-routing/ - Tomasz Nurkiewicz
通常为每个新用户/租户等创建一个数据库并不是一个好的设计。您可能需要考虑使用具有分区功能的单个数据库:http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html - samlewis
1个回答

1
为了直接回答您的问题,您可以通过JMX公开应用程序上下文并以编程方式修改它。但是这样做的问题在于更改将是短暂的,即如果您重新启动服务器,则更改不会被保存。
另一个选择是以编程方式修改基础xml文件(假设您正在使用xml),并在应用程序上下文上调用refresh()。例如,您可以创建一个带有数据源占位符的速度模板:
<beans>
...
#foreach ( $datasource in $datasources )
  $datasource
#end
...
</beans>

然后,您将传递所有所需数据源的列表到Velocity中,它将生成一个更新的datasource-context.xml。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接