一、问题

在使用 Mybatis 操作数据库时,在单元测试时出现了这个问题

 Cause: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed

这个报错的意思是:不允许公开密钥检索

这是 Mysql 连接超时的错误,根据异常信息提示,可能是由于连接字符串URL中缺少”allowPublicKeyRetrieval=true”参数导致的。


二、解决方法

1、修改MySQL数据库连接字符串URL,在末尾追加”?allowPublicKeyRetrieval=true”参数,例如:
String url = "jdbc:mysql://localhost:3306/mydatabase?allowPublicKeyRetrieval=true&useSSL=false";
2、如果您使用的是Java 8及以上版本,可以将SSL模式设置为”false”,即在JDBC驱动程序中通过添加一个额外属性来关闭SSL,例如:
String url = "jdbc:mysql://localhost:3306/mydatabase?sslMode=DISABLED";

这样就不需要”allowPublicKeyRetrieval=true”参数选项了。

3、更新MySQL Connector/J驱动到最新版本。如果您当前使用的是旧版本的MySQL Connector/J驱动,建议您更新驱动程序到最新版本并重新尝试连接,因为较新版本的驱动程序可能会修复与公钥检索相关的问题。