1

我正在使用休眠从数据库中获取数据。我们有 20 多个节点的 oracle RAC 数据库。

现在的问题是,如果数据库的一个节点发生故障,我必须切换到另一个节点,在运行时没有应用程序抛出错误,如果该节点已关闭,我必须切换到第三个节点。

当我们使用传统的 JDBC 方式建立连接时,它可以很容易地完成,因为当与节点的连接失败时,连接对象将为空。

这就是我创建会话工厂的方式,

私有静态最终SessionFactory sessionFactory = buildSessionFactory();

  private static SessionFactory buildSessionFactory() 
  {
       try 
       {
       return new Configuration().configure("database.cfg.xml").buildSessionFactory();
       }
  }

这就是获取会话的方式,

session = HibernateUtil.getSessionFactory().openSession();

现在,我如何确定节点已关闭,以便我可以尝试连接到备用节点。

我不能使用以下类型的配置,因为我所有的节点 sid 都不同

jdbc:oracle:thin:@(description=(address_list=(load_balance=on)(failover=on)       (address=(protocol=tcp)(host=host1)(port=1521))(address=(protocol=tcp)(host=host2)(port=1521)))(connect_data=(service_name=xxxxsid)(failover_mode=(type=select)(method=basic)))

我从 2 天开始就摸不着头脑,想知道如何才能做到这一点。

4

1 回答 1

0

我建议,当您打开会话时,您应该做出断言(Java 断言),例如读取会话状态(只读或其他),这样您可以检查天气连接是否处于活动状态,基于您可以尝试获取的断言另一个节点的不同会话。

此链接可能会对您有所帮助(做出断言):

https://forum.hibernate.org/viewtopic.php?f=1&t=1001337

希望能帮助到你 ;-)

于 2012-07-22T18:35:04.373 回答