Spring Boot部署VPS访问数据库关联页面报Servlet.service()错误
问题排查与解决步骤
首先你的报错信息如下:
ERROR 7379 --- [nio-8080-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.ExceptionInInitializerError] with root cause
你可以按照以下顺序逐步排查问题:
1. 基础运行与端口权限检查
- 先确认VPS上的MySQL服务是否正常启动,执行
systemctl status mysql(部分系统为mysqld)查看运行状态,异常的话先重启MySQL服务。 - 若使用公网IP连接报错,检查VPS安全组、防火墙是否放开3306端口的入站规则,同时修改MySQL配置文件(一般为/etc/mysql/my.cnf)中的
bind-address参数为0.0.0.0(生产环境建议限定为指定访问IP),修改后重启MySQL生效。 - 若使用localhost连接也报错,直接在VPS本地执行
mysql -u 你的数据库用户名 -p测试能否正常登录,排除本地Socket连接异常的问题。
2. 数据库账号权限验证
- 公网IP连接场景下,确认你的数据库账号允许公网访问,执行SQL语句
grant all privileges on kuponi.* to '你的用户名'@'%' identified by '你的密码';,执行后运行FLUSH PRIVILEGES;刷新权限。 - localhost连接场景下,确认账号已授权
'你的用户名'@'localhost'的访问权限,授权方法同上。 - 权限配置完成后,直接在VPS本地执行
mysql -h 你的VPS公网IP -u 用户名 -p测试连接,能正常进入则说明权限配置无问题。
3. JDBC连接配置修正
- 高版本MySQL(8.0+)需要补充时区、SSL等必要参数,完整的连接URL示例:
jdbc:mysql://你的VPS公网IP:3306/kuponi?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true - 检查配置文件中的数据库用户名、密码是否拼写正确,无多余空格、特殊字符未转义的问题。
4. 代码与依赖排查
- 报错中的
ExceptionInInitializerError代表静态资源初始化失败,检查你的数据库相关配置类、DAO层代码的静态代码块、静态变量是否存在加载异常,比如驱动类路径配置错误。 - 确认项目依赖中的MySQL连接驱动版本,和VPS上安装的MySQL大版本匹配,避免版本不兼容导致的初始化失败。
内容的提问来源于stack exchange,提问作者Danilo Congradac
相关产品推荐
相关产品推荐

