Spring Boot JDBC 首次连接失败及解决方案
在使用 Spring Boot 和 JDBC 连接 MySQL 数据库时,经常遇到首次连接失败,后续连接却正常的问题。 错误信息通常显示为:the last packet sent successfully to the server was 0 milliseconds ago.
这通常与 JDBC URL 配置中的参数缺失或设置不当有关。
以下代码片段展示了一个存在问题的 JDBC 连接方法:
private Connection getConnection() throws ClassNotFoundException, SQLException {
String url = "jdbc:mysql://ip:3306/data1?useunicode=true&characterencoding=utf8&servertimezone=asia/shanghai";
String name = "com.mysql.cj.jdbc.driver";
String user = "abc";
String password = "abc2022";
Connection conn = null;
Class.forName(name);
conn = DriverManager.getConnection(url, user, password);
return conn;
}
问题在于 JDBC URL url
参数缺少一些关键配置,导致连接不稳定。建议添加以下参数:
serverTimezone=UTC
:设置服务器时区为 UTC,避免时区差异导致的连接问题。autoReconnect=true
:启用自动重连功能,当连接断开时,驱动程序会尝试自动重新连接。useSSL=false
:禁用 SSL 加密(除非你的数据库服务器强制要求 SSL)。修改后的 JDBC URL 如下:
String url = "jdbc:mysql://ip:3306/data1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&autoReconnect=true&useSSL=false";
通过添加这些参数,可以有效解决 Spring Boot JDBC 首次连接失败的问题,确保连接的稳定性和可靠性。 请注意,替换 ip
和数据库名称 data1
为你的实际值。