Java Hibernate web应用程序与MySQL故障切换

Java Hibernate web应用程序与MySQL故障切换,java,mysql,hibernate,database-replication,Java,Mysql,Hibernate,Database Replication,我开发了一个Java web应用程序,使用Hibernate 3.3.2作为持久化框架,Apache Tomcat 7.0.27作为服务器。 此应用程序已成功设置为使用MySQL 5.5复制服务器:1个主服务器,1个从服务器。只读查询在后者上进行,其他查询在主实例上进行 问题来了:我想测试DB故障转移,也就是说,在某个时候停止从MySQL实例,看看应用程序在只读查询中仍能正常工作。就我在下面的文章中所理解的,这应该是可能的,而不需要对代码进行任何更改。首先,我对第二种情况感兴趣:通信异常(SQL

我开发了一个Java web应用程序,使用Hibernate 3.3.2作为持久化框架,Apache Tomcat 7.0.27作为服务器。 此应用程序已成功设置为使用MySQL 5.5复制服务器:1个主服务器,1个从服务器。只读查询在后者上进行,其他查询在主实例上进行

问题来了:我想测试DB故障转移,也就是说,在某个时候停止从MySQL实例,看看应用程序在只读查询中仍能正常工作。就我在下面的文章中所理解的,这应该是可能的,而不需要对代码进行任何更改。首先,我对第二种情况感兴趣:通信异常(SQL状态以“08”开头)。 不幸的是,这种情况不会发生,如果我停止从服务器,有时需要很长时间才能从服务器获得响应,有时没有响应,HTTP连接就会卡住。在Tomcat日志中,只需获取以下行:

从服务器成功接收的最后一个数据包是N毫秒前的数据包。成功发送到服务器的最后一个数据包是0毫秒前的

下面是hibernate配置的一个片段:

<property name="hibernate.connection.driver_class">com.mysql.jdbc.ReplicationDriver</property>
<property name="hibernate.connection.url">jdbc:mysql://masterIP,slaveIP/mydb?loadBalancePingTimeout=1500&amp;loadBalanceBlacklistTimeout=7000&amp;autoReconnect=true&amp;failOverReadOnly=false&amp;roundRobinLoadBalance=true</property>
com.mysql.jdbc.ReplicationDriver
jdbc:mysql://masterIP,slaveIP/mydb?loadBalancePingTimeout=1500&;loadBalanceBlacklistTimeout=7000&;自动重新连接=正确&;failOverReadOnly=错误&;roundRobinLoadBalance=true
在查看MySQL连接器文档时,我尝试了许多属性配置,但不知道如何实现可靠的故障切换。

我也遇到了同样的问题:

它应该正常工作。。。但我不知道怎么

似乎许多人使用一些外部代理或负载平衡器: