我们当前在项目(5.1.47)中使用最新的v5.1 mysql-connector-java
库,并正在考虑将其升级到最新的v8.0稳定版本(8.0.16)。
我们有一个接口 com.mysql.jdbc.ExceptionInterceptor
的自定义实现,对于特定的错误代码,该接口不仅传播异常,而且强制关闭违规行为连接本身。
这是通过实现以下方法完成的:
SQLException interceptException(SQLException sqlEx, Connection conn);
void init(Connection conn, Properties props) throws SQLException;
此实现非常有用,因为我们的数据库是AWS Aurora(MySQL 5.7),它在两个实例(主实例和从实例)之间具有故障转移机制。在从一个实例到另一个实例的故障转移期间,将引发错误代码为1290的SQLException( MySQL服务器正在使用--read-only选项运行,因此它无法执行此语句)。强制关闭连接可确保在完成故障转移后,该连接可以安全地再次透明重新连接到Java应用程序。
在v8.0中,除了将侦听器的名称更改为 com.mysql.cj.exceptions.ExceptionInterceptor
之外,方法签名现已更改,并且不将Connection作为参数:
Exception interceptException(Exception sqlEx);
ExceptionInterceptor init(Properties props, Log log);
是否可以使用新界面访问有问题的连接?