Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多租户应用程序的数据源_Java_Spring_Hibernate_Datasource_Multi Tenant - Fatal编程技术网

Java 多租户应用程序的数据源

Java 多租户应用程序的数据源,java,spring,hibernate,datasource,multi-tenant,Java,Spring,Hibernate,Datasource,Multi Tenant,我正在开发一个基于Hibernat4的多租户应用程序。 我使用单独的数据库解决方案。 我使用Mysql作为数据库提供者。 对于每个新租户,我将向mysql添加一个新数据库。 我想在不重新启动appserver的情况下将新租户添加到我的应用程序中。 我使用DriverManager数据源为每个租户创建一个新的数据源,但是这个类不打算在生产中使用吗?我应该使用哪一类? 我想将数据源添加到appserver并使用JNDIdatasource,但问题是我需要为每个新租户重新启动appserver。有没有

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

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

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

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

...
#foreach($datasources中的datasource)
$datasource
#结束
...
然后将所有必需数据源的列表传递给velocity,velocity随后将生成更新的datasource-context.xml


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

也许这会对您有所帮助:为每个新用户/租户等创建数据库通常不是一个好的设计。您可能想考虑使用一个带有分区的数据库: