CentOS Java项目迁移指南
小樊
41
2025-12-19 09:25:47
一 迁移总览与准备
- 明确范围与依赖:梳理现有系统的Java版本、运行时/框架(如 Spring Boot、Tomcat)、第三方库、启动方式(systemd/脚本)、外部数据库/缓存/消息队列、文件存储与网络边界。
- 制定迁移计划:按业务影响划分窗口,准备回滚策略、资源清单(CPU/内存/磁盘/端口)、责任人与验收标准(功能、性能、稳定性)。
- 全量备份:备份应用与配置(如application.yml、日志目录、密钥/证书)、数据库(全量+必要的增量方案)、反向代理/负载均衡配置、定时任务与监控告警规则。
- 版本策略:优先保持与源环境一致的JDK版本;若需升级,建议先评估到**LTS版本(如 Java 11、Java 17)**的兼容性,再在预发环境验证后再切换。
二 环境搭建与验证
- 安装 JDK(示例)
- OpenJDK 8:sudo yum install java-1.8.0-openjdk-devel -y
- 如需 Oracle JDK,可下载 RPM 包后用:sudo rpm -ivh jdk-8uXX-linux-x64.rpm
- 配置环境变量(推荐隔离到 profile.d)
- 查找路径:sudo update-alternatives --config java
- 新建文件:sudo vim /etc/profile.d/java.sh
- 写入示例:
- OpenJDK 8:export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
- Oracle JDK 8:export JAVA_HOME=/usr/java/jdk1.8.0_XX
- export PATH=$JAVA_HOME/bin:$PATH
- 生效:source /etc/profile.d/java.sh
- 验证:java -version、javac -version
- 可选组件
- Maven:sudo yum install maven -y(或下载安装并设置 MAVEN_HOME)
- Tomcat:下载解压至 /opt,配置 CATALINA_HOME,可用 systemd 托管并设置 JAVA_OPTS(如堆大小、GC 策略)。
三 应用迁移步骤
- 构建与打包
- Maven 项目:在项目根目录执行 mvn clean package;产物常见为 JAR(Spring Boot)或 WAR(传统 Web)。
- 配置与资源
- 迁移并调整配置:数据库连接、缓存/消息地址、文件存储路径、日志与密钥路径;尽量使用外部化配置与环境变量,避免硬编码。
- 数据库迁移
- 小数据量:逻辑导出/导入(如 mysqldump)。
- 大数据量/低停机:主从同步或物理/逻辑复制,先做一致性校验与回放演练。
- 部署与启动
- JAR:nohup java -jar app.jar –spring.profiles.active=prod > app.log 2>&1 &
- WAR:放入 Tomcat 的 webapps 目录,自动解压部署;或通过 manager 部署。
- 服务托管
- 推荐 systemd:创建 /etc/systemd/system/app.service,设置 User、WorkingDirectory、ExecStart、Environment(含 JAVA_HOME)、Restart=always,然后 systemctl daemon-reload && systemctl enable --now app。
四 切换与回滚
- 灰度与切换
- 通过负载均衡/Nginx/HAProxy逐步切流(权重/金丝雀),观察错误率、延迟、业务指标与日志告警。
- 回滚条件与路径
- 触发条件:核心功能异常、性能劣化、致命错误率上升等。
- 回滚路径:流量切回旧集群/旧实例;数据库回滚到备份点;应用回滚到上一版本构件与配置。
- 验收与观察
- 功能回归、关键业务链路压测、监控与日志巡检,确认稳定性后再扩大流量。
五 常见问题与排查清单
- Java 版本不匹配
- 现象:UnsupportedClassVersionError、启动失败。
- 处理:java -version、javac -version、echo $JAVA_HOME 核对;必要时 alternatives 切换版本并重启应用。
- 端口与防火墙
- 现象:访问不了 8080/3306 等。
- 处理:ss -tlnp | grep 端口;firewall-cmd --permanent --add-port=8080/tcp && firewall-cmd --reload;云上安全组放通。
- 数据库连接失败
- 现象:Access denied、Communications link failure。
- 处理:核对 JDBC URL、用户名/密码、白名单/SSL、网络连通性;必要时迁移后执行一次全量校验。
- Tomcat 无法启动
- 现象:端口占用、JVM 参数错误、权限不足。
- 处理:查看 catalina.out 与 localhost.log;检查 server.xml、目录权限、JAVA_OPTS 与内存设置。
- 构建失败
- 现象:依赖找不到、编译错误、插件版本冲突。
- 处理:mvn clean package -U;核对 maven-compiler-plugin 的 source/target 与 JDK 一致;必要时调整仓库与依赖版本。