java部署失败主因是jdk版本、防火墙/selinux、systemd配置、文件权限四类问题:须用temurin替代openjdk;firewalld放行端口并配置selinux端口类型;systemd需重定向日志、设重启策略及工作目录;全程统一非root用户并规范tmp与日志目录权限。

Java 版本选错直接导致 java -version 报错或应用启动失败
CentOS 默认源里的 java-1.8.0-openjdk 看似能用,但很多 Spring Boot 2.3+、Dubbo 3.x 或 JNI 调用场景会因 OpenJDK 缺少某些 native 组件而崩溃。别贪省事直接 yum install java —— 它装的是最小化运行时,连 jps 都可能找不到。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 生产环境统一用官方二进制包:去 Adoptium 下载
Temurin-17.jdk(LTS)或Temurin-21.jdk,解压到/opt/java - 手动配置
JAVA_HOME:在/etc/profile.d/java.sh里写死路径,别依赖alternatives,否则重启后失效 - 验证是否生效:
source /etc/profile.d/java.sh && java -version输出必须带Eclipse Temurin字样,不是openjdk
防火墙和 SELinux 不关,Spring Boot 的 server.port=8080 就是死活不响应
云服务器默认开启 firewalld,且 CentOS 7/8 的 SELinux 策略会拦截 Java 进程绑定端口——哪怕 netstat -tlnp | grep 8080 显示进程在跑,curl localhost:8080 成功,外网依然 404 或超时。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 放行端口别只改
iptables:执行firewall-cmd --permanent --add-port=8080/tcp,再firewall-cmd --reload - SELinux 临时关闭可验证问题:
setenforce 0;若恢复访问,说明是它拦的;长期方案是semanage port -a -t http_port_t -p tcp 8080 - 检查 Java 应用是否绑定了
127.0.0.1:Spring Boot 默认server.address=127.0.0.1,得显式设成0.0.0.0
systemd 管理 Java 服务时,java -jar 启动失败却没日志
直接写 ExecStart=/usr/bin/java -jar /opt/app.jar 很危险:Java 进程一挂 systemd 就认为服务“已退出”,但标准错误流被吞掉,journalctl -u app 只看到 “Started” 和 “Stopped”,查不到 OOM 或 ClassNotFoundException。
飞蛙B2B2C(FeiWa B2B2C)商城系统是山东破浪网络科技有限公司于2017年最新推出的企业级B2B2C电商平台系统,采用PHP5+MySQL技术为基础,OOP(面向对象)方式进行核心框架搭建,结合MVC模式进行开发,可以支持Windows/Unix服务器环境,需PHP5.3及以上版本支持,可运行于包括Apache、IIS和Nginx在内的多种WEB服务器。飞蛙B2B2C(FeiWa B2
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 必须重定向输出:
ExecStart=/usr/bin/java -jar /opt/app.jar >> /var/log/app.log 2>&1 - 加
Restart=always和RestartSec=10,否则 JVM 崩溃后服务就停了 - 指定工作目录:
WorkingDirectory=/opt,避免读取配置文件时路径错乱 - 内存参数别写死在命令行:用
Environment="JAVA_OPTS=-Xms512m -Xmx1g",方便后续调参
用户权限不对,java -jar 跑着跑着就 Permission denied
很多人用 root 启动一次,生成了 /tmp 下的 jar 解压目录或日志文件,之后改用普通用户跑,结果报 java.io.FileNotFoundException: /tmp/jar_cache_abc/META-INF/MANIFEST.MF (Permission denied) —— 这不是 Java 错,是 Linux 文件权限继承惹的祸。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 从头到尾只用一个非 root 用户部署:比如创建
appuser,chown -R appuser:appuser /opt/app.jar - 禁用
tmp目录自动解压:启动时加-Djvm.tmp.dir=/opt/app/tmp,并提前mkdir -p /opt/app/tmp && chown appuser:appuser /opt/app/tmp - 检查
/var/log下日志目录权限:如果用logback-spring.xml写日志到/var/log/myapp,得mkdir -p /var/log/myapp && chown appuser:appuser /var/log/myapp
Java 部署最麻烦的从来不是装 JDK,而是权限、路径、环境变量三者咬合不上——漏掉任意一环,服务都可能凌晨三点静默退出,还查不到原因。









