问题复现
本地好好的Java程序,打包为jar包封装成exe部署成Windows服务后却无法连接数据库。但是双击Navicat后,都不需要重启服务就连接上了。没错就是Navicat。
解决方案
在druid url配置时加上allowPublicKeyRetrieval为true即可。
datasource:
druid:
#&serverTimezone=GMT%2B8指定时区
url: jdbc:mysql://***&allowPublicKeyRetrieval=true
问题排查
- 查看日志,发现错误
Public Key Retrieval is not allowed
- 分析错误 Public Key Retrieval is not allowed(不允许检索公钥) allowPublicKeyRetrieval=true 是针对 MySQL 8.0 的一项关键参数。MySQL 8.0 默认使用了 SHA-256 密码加密方式,而这种加密方式是基于公钥/私钥的加密,在连接数据库时需要进行公钥获取。如果不将 allowPublicKeyRetrieval 参数设置为 true,那么无法建立加密连接并获取公钥,就会出现上述错误。
但,其实还是没理解