码迷,mamicode.com
首页 > 数据库 > 详细

关于JDBC连接数据库时出现的Public Key Retrieval is not allowed错误

时间:2018-10-05 19:47:02      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:automatic   映射   drive   sql   mybatis框架   抛出异常   完成   文件   ssi   

问题描述

    最近在学习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错误

标签:automatic   映射   drive   sql   mybatis框架   抛出异常   完成   文件   ssi   

原文地址:https://www.cnblogs.com/jpfss/p/9745603.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!