1. 程式人生 > >關於JDBC連接數據庫時出現的Public Key Retrieval is not allowed錯誤

關於JDBC連接數據庫時出現的Public Key Retrieval is not allowed錯誤

三種 back 關於 reg host 出現 mysql命令 一次 增加

問題描述

最近在學習MyBatis框架,參考官方的文檔通過配置文件的方式已經實現了通過Configuration配置文件和mapper映射文件訪問mysql8數據庫,於是想試試不使用XML文件去構建SqlSessionFactory,結合配置文件和官方文檔,依次構建了DataSource,JdbcTransactionFactory,Configuration等等,並添加Mapper,在Mapper接口中通過註解配置了SQL語句,一步步的構建完成,前面都順利執行沒有拋出異常,當通過SqlSession拿到Mapper執行SQL語句的時候,拋出了Public Key Retrieval is not allowed異常。

解決過程

通過一通百度,收集了可能導致這個問題的原因如下:

1.mysql5及之前的版本使用的是舊版驅動"com.mysql.jdbc.Driver",mysql6以及之後的版本需要更新到新版驅動,對應的Driver是"com.mysql.cj.jdbc.Driver",但是這個驅動錯誤的信息是"Loading class `com.mysql.jdbc.Driver‘. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver‘. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.",排除這個原因。

2.連接數據庫的url中,加上allowPublicKeyRetrieval=true參數,經過驗證解決該問題。

3.網上看到另外的解決 辦法,修改default_authentication_plugin設置,在my.ini中增加[mysqld]default_authentication_plugin=mysql_native_password,然後mysql命令行執行ALTER USER ‘username‘@‘localhost‘ IDENTIFIED WITH mysql_native_password BY ‘password‘;最後在url中添加時區參數serverTimezone=Asia/Shanghai。

總結

我用的第二種方法解決了,網上說的第三種方法是在數據庫重啟後遇到的,問題的原因也不甚清楚。不知道是不是mysql8才會遇到的一些坑。我在使用第二種方法連接成功一次後,再去掉allowPublicKeyRetrieval=true參數,還是能夠正常連接,難道數據庫連接過一次之後會自動緩存相同連接的配置信息嗎,不是很懂。有懂的大佬還請指教。

關於JDBC連接數據庫時出現的Public Key Retrieval is not allowed錯誤