connector/J为MySQL群集或多主服务器部署提供了有用的负载平衡实现,如 第9.3节“使用连接器/ J配置负载平衡” 和对多主复制拓扑的支持中所述。此相同的实现用于平衡具有复制意识的连接的只读从属服务器之间的负载。
当尝试在多台服务器之间平衡工作负载时,驱动程序必须确定何时可以安全地交换服务器,例如,在事务过程中这样做可能会引起问题。重要的是不要丢失状态信息。因此,Connector / J仅在以下情况之一发生时才尝试选择新服务器:
在事务边界处(显式提交或回退事务)。
遇到通信异常(SQL状态以“ 08”开头)。
当SQLException由用户定义的比赛条件下,利用扩展点由定义的 loadBalanceSQLStateFailover, loadBalanceSQLExceptionSubclassFailover 或loadBalanceExceptionChecker 特性。
第三个条件围绕三个属性,这些属性使您可以控制哪个SQLException触发故障转移:
loadBalanceExceptionChecker-该 loadBalanceExceptionChecker属性确实是关键。这采用了实现新com.mysql.cj.jdbc.ha.LoadBalanceExceptionChecker 接口的标准类名 。该接口非常简单,您只需要实现以下方法:
public boolean shouldExceptionTriggerFailover(SQLException ex)
SQLException传入 A ,然后返回布尔值。值为时true ,false不会触发故障转移。
您可以使用它来实现自己的自定义逻辑。一个可能有用的示例是在使用MySQL Cluster时处理瞬时错误时,其中某些缓冲区可能会过载。以下代