根据错误信息,该问题由MySQL客户端不支持服务器请求的身份验证协议导致,通常是因为MySQL 8.0及以上版本默认使用caching_sha2_password认证插件,而旧版JDBC驱动不兼容。以下是解决方案:
解决方案
升级JDBC驱动
将mysql-connector-java升级到8.0及以上版本(如8.0.33):
xml
XML
<!-- 在pom.xml中添加或更新依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
修改MySQL用户认证方式
如果无法升级驱动,可修改MySQL用户认证插件为mysql_native_password:
sql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
检查数据库连接URL
确保连接URL包含时区参数:
xml
Copy Code
<property name="url" value="jdbc:mysql://localhost:3306/your_db?useSSL=false&serverTimezone=Asia/Shanghai"/>
关键注意事项
驱动版本兼容性:MySQL 8.0+要求JDBC驱动8.0+,否则需修改认证插件。
认证插件修改:仅在无法升级驱动时使用,可能影响安全性。
XML配置检查:错误信息提示UserMapper.xml可能存在问题,确保XML与Mapper接口方法名一致。
验证步骤
升级驱动后清理项目缓存(如Maven的target目录)。
重启应用并测试数据库操作。
通过以上步骤,应能解决MySQLNonTransientConnectionException错误。