ubuntu部署spring boot常见报错根源是java版本、cgroup版本、mysql认证插件、docker配置不匹配:spring boot 2.x需jdk 8/11,3.x强制jdk 17+;cgroup v2下processormetrics失败需改v1或加--cgroup-version 1;mysql 8.0默认caching_sha2_password需alter user切回mysql_native_password;docker部署须注意镜像jdk与宿主机一致性。

Ubuntu系统安装Spring Boot环境报错,多数不是Spring Boot本身的问题,而是底层依赖或运行时环境不匹配导致的。重点排查Java版本、Cgroup控制组版本、MySQL认证插件、Docker容器配置这四类常见根源。
确认Java版本与Spring Boot兼容
Spring Boot 2.x推荐JDK 8或11,3.x要求JDK 17+。Ubuntu默认源可能只提供OpenJDK 11/17,但项目若基于老版本开发,强行用高版本JDK会触发类加载或反射异常。
- 执行
java -version确认实际运行版本,注意区分openjdk和oraclejdk - 优先用
sudo apt install openjdk-11-jdk(稳定可靠),避免手动解压Oracle JDK带来的环境变量隐患 - 检查
$JAVA_HOME是否指向正确路径,且PATH中$JAVA_HOME/bin在前,可用which java验证
处理Docker中ProcessorMetrics类加载失败
在Docker里启动Spring Boot应用报Cannot invoke "jdk.internal.platform.CgroupInfo.getMountPoint()",本质是JDK 17+在cgroup v2环境下无法获取CPU指标——Micrometer调用失败。
- 先查宿主机cgroup版本:
stat -fc %T /sys/fs/cgroup/,返回cgroup2fs即v2 - 临时方案:启动容器时加参数
--cgroup-version 1(Docker 20.10+支持) - 长期方案:修改Ubuntu GRUB配置,设
systemd.unified_cgroup_hierarchy=0并重启,强制降级为cgroup v1
修复MySQL连接拒绝与认证插件冲突
Spring Boot启动时报Access denied for user 'root'@'localhost',常见于Ubuntu安装MySQL 8.0后,默认认证插件从mysql_native_password改为caching_sha2_password,而旧驱动不兼容。
- 登录MySQL后执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 确保
application.yml中JDBC URL含?serverTimezone=UTC&useSSL=false,避免时区和SSL握手问题 - 若用Docker部署MySQL,挂载自定义
my.cnf,显式指定default_authentication_plugin=mysql_native_password
检查Nginx反向代理与端口占用冲突
前端Vue通过Nginx代理请求后端,却返回502或连接拒绝,往往因Spring Boot未监听0.0.0.0,或Nginx配置未透传Host头导致跨域拦截。
- Spring Boot配置
server.address=0.0.0.0,确保监听所有网卡,不只是localhost - Nginx location块中加入
proxy_set_header Host $host;和proxy_set_header X-Real-IP $remote_addr; - 用
sudo ss -tuln | grep :8080确认端口是否真被占用,避免多个jar进程冲突











