AWS EC2 Ubuntu部署SpringBoot项目遇EntityNotFoundException求助
在AWS EC2 Ubuntu实例部署SpringBoot项目后,访问时出现错误:Servlet.service() for servlet [jsp] threw exception: jakarta.persistence.EntityNotFoundException。项目本地运行正常,EC2上可访问根路由,以下是具体排查步骤:
一、验证EC2本地MySQL连接有效性
- 登录EC2上的MySQL,确认账号密码正确:
mysql -u root -p
输入配置文件中的密码rootroot,若登录失败,说明账号密码不匹配,需调整MySQL密码或配置文件。
- 检查目标数据库
liaisonmessaging是否存在:
SHOW DATABASES;
若不存在,需创建数据库或确认备份导入是否成功。
- 进入数据库,检查业务表是否存在且数据完整:
USE liaisonmessaging; SHOW TABLES; -- 可查询关键表数据,例如用户表 SELECT * FROM 你的用户表名 LIMIT 10;
若表不存在或数据缺失,说明备份导入失败,需重新导入。
- 确认root用户允许本地连接:
SELECT user, host FROM mysql.user WHERE user='root';
若host列不是localhost或127.0.0.1,需调整权限:
GRANT ALL PRIVILEGES ON liaisonmessaging.* TO 'root'@'localhost' IDENTIFIED BY 'rootroot'; FLUSH PRIVILEGES;
二、检查SpringBoot应用的数据库配置与日志
- 确认
application.properties中的配置与EC2上的MySQL完全一致:
spring.datasource.url=jdbc:mysql://localhost:3306/liaisonmessaging spring.datasource.username=root spring.datasource.password=rootroot
重点核对数据库名、用户名、密码是否正确。
- 查看SpringBoot应用的启动日志,定位连接问题:
找到应用日志文件(通常在war包所在目录的logs文件夹,或通过控制台输出查看),执行:
tail -f 你的应用日志路径.log
若日志中存在Cannot create PoolableConnectionFactory等连接错误,说明数据库连接失败;若仅出现EntityNotFoundException,则大概率是查询的实体在数据库中不存在。
三、确认MySQL服务状态与端口监听
- 检查MySQL服务是否正常运行:
sudo systemctl status mysql
若服务未启动,执行启动命令:
sudo systemctl start mysql sudo systemctl enable mysql
- 验证MySQL是否监听本地3306端口:
sudo netstat -tulpn | grep 3306
输出应包含127.0.0.1:3306,确保本地连接可访问。
四、检查Apache代理配置正确性
- 确认Apache已启用proxy和ajp-proxy模块:
sudo a2enmod proxy proxy_ajp
若未启用,执行上述命令后重启Apache:
sudo systemctl restart apache2
- 检查虚拟主机配置中的ProxyPass规则,确保指向正确的AJP端口:
打开虚拟主机配置文件(通常在/etc/apache2/sites-available/000-default.conf),确认存在如下配置:
ProxyPass / ajp://localhost:9090/ ProxyPassReverse / ajp://localhost:9090/
若配置错误,修改后重启Apache。
- 查看Apache错误日志,排查代理问题:
sudo tail -f /var/log/apache2/error.log
若日志中出现AH00896: failed to make connection to backend: localhost等错误,说明SpringBoot应用未在9090端口正常监听,需检查应用是否启动。
五、验证SpringBoot应用运行状态
- 检查应用进程是否存在:
ps aux | grep java
若未找到对应进程,说明应用未启动,需重新运行war包:
java -jar 你的项目war包名.war
建议使用后台运行方式,避免断开SSH后进程终止:
nohup java -jar 你的项目war包名.war &
- 检查应用是否监听9090端口:
sudo netstat -tulpn | grep 9090
若未监听该端口,需检查Application.java中的AJP配置是否正确,确认端口未被占用。
内容的提问来源于stack exchange,提问作者it_tony

