linux部署spring boot 3.x/4.x应用核心是jdk版本匹配(3.x需jdk 17,4.x强制jdk 21)、jar包权限校验、systemd服务常驻;须用java -version验证jdk、sha256sum校验包完整性、chmod +x赋权,并在systemd中显式声明java_home。

在Linux服务器上部署Spring Boot 3.x或4.x应用,核心是确保JDK版本匹配、可执行JAR包权限正确、服务能稳定后台运行——JDK 17是Spring Boot 3.x的最低要求,而Spring Boot 4.x(截至2026年8月已正式发布)强制要求JDK 21,用错JDK会导致启动时直接抛出UnsupportedClassVersionError且无法恢复。
确认并安装匹配的JDK版本
第一步:检查当前Java版本,执行java -version。若输出显示1.8、11或17但你要部署Spring Boot 4.x,必须更换;若显示21但你要跑3.x,也需降级——【Spring Boot 4.x不兼容JDK 17,即使能启动也会在运行时因GraalVM native image机制缺失而崩溃】。
第二步:下载对应JDK。Spring Boot 3.x → 下载JDK 17(推荐Eclipse Temurin 17.0.11+7),Spring Boot 4.x → 下载JDK 21(推荐Eclipse Temurin 21.0.4+7)。使用wget直接获取官方tar.gz包,例如:wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.11%2B7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.11_7.tar.gz。
第三步:解压到/opt/java,创建软链接统一管理:sudo tar -xzf OpenJDK17U-jdk_x64_linux_hotspot_17.0.11_7.tar.gz -C /opt/java && sudo ln -sf /opt/java/jdk-17.0.11+7 /opt/java/latest。
第四步:配置全局环境变量。编辑/etc/profile.d/java.sh,写入:export JAVA_HOME=/opt/java/latest和export PATH=$JAVA_HOME/bin:$PATH,然后执行source /etc/profile.d/java.sh。验证:运行java -version应精确显示匹配版本号。
上传并校验Spring Boot可执行JAR包
方法一:用scp上传(推荐用于单次部署):scp -P 2222 myapp-1.0.0.jar user@server:/opt/app/myapp.jar。注意端口-P必须显式指定,否则默认走22,容易连错跳板机。
方法二:用rsync增量同步(适合频繁更新):rsync -avz --progress -e "ssh -p 2222" target/myapp-*.jar user@server:/opt/app/。它会自动跳过未修改的文件,比scp快得多。
上传后立即校验完整性:sha256sum /opt/app/myapp.jar,与本地构建输出的SHA256值比对。不一致说明传输损坏,强行启动会导致ClassNotFoundException随机出现,而非明确报错。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
赋予执行权限并测试启动
执行chmod +x /opt/app/myapp.jar。Spring Boot 3.x/4.x的fat jar默认具备可执行属性,但某些CI流水线打包时可能丢失x位,不加这一步会导致Permission denied错误。
先前台运行一次验证:java -jar /opt/app/myapp.jar。观察控制台是否输出Started Application in X.XXX seconds,同时访问http://localhost:8080/actuator/health返回{"status":"UP"}。成功后按Ctrl+C终止。
配置systemd服务实现后台常驻
第一步:创建服务定义文件/etc/systemd/system/myapp.service,内容如下:
[Unit]<br> Description=My Spring Boot Application<br> After=network.target<br><br>[Service]<br> Type=exec<br> User=appuser<br> Group=appuser<br> WorkingDirectory=/opt/app<br> ExecStart=/usr/bin/java -Dspring.profiles.active=prod -jar /opt/app/myapp.jar<br> Restart=always<br> RestartSec=10<br> Environment="JAVA_HOME=/opt/java/latest"<br><br>[Install]<br> WantedBy=multi-user.target
注意:【ExecStart中必须显式指定JAVA_HOME环境变量,systemd默认不继承shell的环境变量,否则可能调用系统旧版Java导致启动失败】。
第二步:重载配置并启用服务:sudo systemctl daemon-reload → sudo systemctl enable myapp.service → sudo systemctl start myapp.service。
第三步:查看实时日志确认运行状态:sudo journalctl -u myapp.service -f。看到连续滚动的INFO日志且无ERROR行,即表示部署完成。










