我正在使用hibernate从数据库中获取数据。我们有20多个节点的oracle RAC数据库。
现在的问题是,如果数据库的一个节点出现故障,我必须在运行时切换到另一个节点,而不会让应用程序抛出错误,如果该节点出现故障,我就会明智地切换到第三个节点。 / p>
当我们使用遗留JDBC样式建立连接时,它可以很容易地完成,因为当与节点的连接失败时,连接对象将为null
这是我创建会话工厂的方式,
private static final 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天开始摸不着头脑,弄清楚如何实现这一目标。
答案 0 :(得分:0)
我建议你打开一个会话时你应该做一个断言(Java断言),比如读取会话状态(只读或者其他)这样你可以根据你的断言来检查连接是否活动的天气可以尝试为另一个节点获取不同的会话。
这个链接可能对你有所帮助(做出断言):
https://forum.hibernate.org/viewtopic.php?f=1&t=1001337
希望它有所帮助; - )