1. 项目概述与部署背景
SSM(Spring+SpringMVC+MyBatis)作为JavaEE领域的经典框架组合,在企业级应用开发中占据重要地位。去年我们团队完成了一个日均访问量50万+的电商后台系统,正是基于SSM架构实现的。今天我就来复盘当时从开发环境到生产服务器的完整部署过程,包含那些官方文档里不会写的实战细节。
服务器部署本质上是在解决"开发环境代码如何变成用户可访问的服务"这个问题。与简单的本地运行不同,生产部署需要考虑性能优化、安全防护、故障恢复等关键因素。以我们项目为例,部署后的系统需要保证99.9%的可用性,这意味着全年停机时间不能超过8.76小时。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与工具选型
2.1 服务器基础环境配置
我们选择CentOS 7.6作为操作系统,这个版本在稳定性和兼容性上都有很好表现。以下是初始化操作实录:
bash复制# 更新系统组件
yum update -y
# 安装基础工具集
yum install -y vim wget curl net-tools lsof
# 关闭不必要的服务
systemctl stop firewalld
systemctl disable firewalld
# 设置时区
timedatectl set-timezone Asia/Shanghai
注意:生产环境建议保留防火墙但配置好规则,我们这里关闭仅用于演示环境
2.2 Java环境部署
选择JDK8而非新版的原因在于:大多数SSM项目最初都是基于Java8开发的,升级JDK版本可能导致兼容性问题。我们使用Oracle JDK而非OpenJDK,因为某些性能监控工具需要Oracle专有API。
bash复制# 下载JDK rpm包
wget https://download.oracle.com/otn-pub/java/jdk/8u301-b09/d3c52aa6bfa54d3ca74e617f18309292/jdk-8u301-linux-x64.rpm
# 安装
rpm -ivh jdk-8u301-linux-x64.rpm
# 配置环境变量
echo 'export JAVA_HOME=/usr/java/jdk1.8.0_301-amd64' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
验证安装:
bash复制java -version
# 应输出:java version "1.8.0_301"
2.3 数据库环境搭建
MySQL 5.7是我们的选择,因为:
- 对MyBatis的兼容性最好
- 比5.6有显著的性能提升
- 比8.0更稳定且资源占用更低
安装步骤:
bash复制# 添加MySQL仓库
rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# 安装服务端
yum install -y mysql-community-server
# 启动服务
systemctl start mysqld
# 获取临时密码
grep 'temporary password' /var/log/mysqld.log
# 安全配置
mysql_secure_installation
关键配置项(/etc/my.cnf):
ini复制[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
innodb_buffer_pool_size=2G # 根据内存调整
max_connections=500
3. 项目构建与部署
3.1 源码打包与优化
使用Maven进行打包时,我们采用如下命令确保生产环境配置生效:
bash复制mvn clean package -Pprod -DskipTests
这里有几个关键点:
-Pprod激活生产环境profile-DskipTests跳过测试加速打包- 建议添加
-Dmaven.compile.fork=true启用并行编译
打包后需要检查生成的war包:
bash复制# 查看文件大小
ls -lh target/*.war
# 典型SSM项目war包应在20-50MB之间
3.2 Tomcat配置与部署
我们选择Tomcat 9.x版本,与JDK8完美兼容。关键配置项(conf/server.xml):
xml复制<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
maxThreads="500"
minSpareThreads="20"
acceptCount="100"
