如何在没有多个cfg.xml文件的情况下通过hibernate处理多个数据库

时间:2017-03-22 12:19:54

标签: postgresql hibernate orm multiple-databases

我们有一个基于Java-Hibernate的Web应用程序,我们在其中处理PostgreSQL数据库。(它是一个包含多个模式的单个数据库。)

目前我们正面临可扩展性问题,因此我们决定将我们的架构拆分为多个数据库。

示例

  • 以前我们有一个名为" mydb"。
  • 的数据库
  • 现在我们将数据库拆分为" mydb_1"," mydb_2"," mydb_3"等等...... (随着负载的增加,我们将创建新的数据库。)

问题

  • 如何从一个* .cfg.xml管理多个数据库? (我们不想每次都为每个数据库引入多个* .cfg.xml。)
  • 这可以用更新的hibernate版本来实现吗? (我们准备升级我们的Hibernate版本)
  • 我们需要创建会话工厂池吗? (我认为这是一个坏主意,并认为...... :))

注意:如果有人可以为此提供教程/文档链接,那就太棒了。

类似问题:Hibernate using multiple databases

(我期待类似的答案,但没有多个cfg.xml :()

1 个答案:

答案 0 :(得分:1)

好的,所以你的要求不是

  

只有一个hibernate配置文件

但是能够

  

在不停止服务器的情况下创建新的sessionFactory。

您引用的问题中的代码如下所示:

Configuration config = new Configuration().configure("<complete path to your cfg.xml file>");
SessionFactory sessionFactory = config.buildSessionFactory();

在获得sessionFactory之前,您可以先看到配置对象。在建立会话工厂之前,只需在代码中摆弄它:

Configuration config = new Configuration().configure("<complete path to your cfg.xml file>");
config.setProperty("datasource", new_datasource_to_the_new_database)
SessionFactory sessionFactory = config.buildSessionFactory();
  • 用您在当前hibernate.cfg.xml文件中使用的实际密钥替换"datasource"密钥,以便覆盖它。构建新数据源,与当前构建新数据源的方式相同,指向新数据库。
  • 将会话工厂保持在可访问的位置
  • 进行治疗时,请选择正确的sessionFactory并从那里获取会话。