Hibernate动态改变多个连接

Mik*_*ike 16 java database postgresql hibernate

我知道有关于这种情况的类似问题,但是我发现它们都不符合我的情况,我希望有一个不会影响性能的解决方案.我必须与不同的数据库(所有postgresql)建立多个连接,问题是数据库可能很多,因为它们不断被创建.

目前我只有一个已知的数据库,用于存储来自其他数据库的连接字符串.这些数据库可以是1,2,5,10或N,其中最棘手的部分是,从我的角度来看,我永远不会知道它们的数量以及它们的位置和凭据(所有存储在我的中央数据库中).用例的工作方式是,为了在这些数据库之一上进行操作,我必须首先从中央数据库中获取所需数据库的位置,然后执行操作.

目前,我已经能够通过单一的SessionFactory执行操作,但是即使是简单的选择/更新操作也太慢了,我担心的是当发出多个请求时,我们可能会从Hibernate获得内存不足例外.

关于什么是这种情况的最佳方法的任何想法?

Mar*_*ali 0

根据我的经验,我使用单个数据库中的许多模式。Hibernate 需要为每个模式以及每个数据库创建许多 EntityManagerFactory。

您正在使用的每个模式或每个数据库都需要一个 EntityManagerFactory。
而且您知道获取 EntityManagerFactory 在资源和时间方面非常昂贵。
之后获得一个EntityManager就非常便宜了。

因此,在您的情况下,您必须创建一个 N EntityManagerFactory,其中一个用于每个不同的数据库或同一数据库中的不同模式。

由于创建 EntityManagerFactory 的成本很高,因此您必须仅在必要时以及必要时创建它们,并且您知道您必须等待近 30 秒或更长时间才能获取其中的每个对象。

为了避免内存不足异常,您可以尝试测试创建 1 到 N 的 EntityManagerFactory 的最大数量,并查看您的资源是否可以支持这一点。

如果您发现当您到达 X 数量并超出此数量时,系统总是崩溃,那么您可以将 EntityManagerFactory 的并发数量限制为此 X 限制数量。

尝试让我知道您的结果或者您是否需要一些代码示例