简介:面向Java Web初学者和希望夯实项目实战能力的开发者,这份“苍穹外卖项目实战二”环境搭建资料包,针对从零配置一套可运行的外卖系统开发环境,涉及Spring Boot后端服务、MySQL数据库、前端HTML页面及本地Web服务器的完整配合,适合边看边练。包内共181个文件、约5.96MB,其中86个java文件对应核心逻辑与实体类,8个js和6个css支撑前端交互与样式,3个sql脚本用于初始化数据库,另有图片、Nginx配置、Maven配置等辅助文件,结构清晰便于对照学习。资料已有4168人学习,说明其在实际项目参考中得到不少开发者认可。借助这份资源,可以快速补齐环境搭建中的常见缺口,比如数据库初始化、静态资源引入、后端接口联调、本地服务启动等,从而把更多精力投入到苍穹外卖的业务功能实现、功能测试与部署演练上,少走弯路。
1. 项目概述与环境搭建的整体思路
1.1 这个项目到底在做什么
先交代一下背景。苍穹外卖是一个典型的前后端分离的Java项目实战课,模拟真实的外卖点餐业务场景,覆盖管理端和用户端两端业务。管理端面向商家,处理菜品管理、套餐管理、订单派送、数据统计等后台业务;用户端则面向普通消费者,包含微信小程序端的点餐、购物车、下单支付等流程。作为系列教程的第二章,这一阶段的核心任务就是把整套开发环境跑通,为后面的代码编写和业务实现打基础。
很多人在这个环节容易犯一个错误:觉得环境搭建没什么技术含量,直接把教程里的软件下载地址挨个装一遍就算完事。这种心态在前期可能看不出问题,但到了后面做数据库迁移、Redis缓存、前后端联调的时候,各种版本冲突和环境变量问题就会集中爆发,排查起来非常痛苦。我的建议是,把环境搭建当成一个正式的工程任务来对待,每一步都弄清楚“为什么这么做”,而不是机械地执行命令。
1.2 你需要准备哪些核心组件
整个环境涉及的技术栈并不复杂,但组件之间的依赖关系需要理清。我列一下最终需要装齐的东西:
- JDK 1.8(注意是这个版本,后面会解释为什么不用更新的版本)
- Maven 3.6+,用于项目依赖管理和构建
- MySQL 5.7 或 8.0,数据库存储
- Redis 非Windows官方版或Linux环境下的Redis,用于缓存和Session共享
- Nginx,用于反向代理和静态资源服务,尤其是前端页面挂载
- Node.js 16+,用于前端Vue项目的运行和构建
- 微信开发者工具,用于用户端小程序的调试(可不装,但建议装)
如果你在Windows上开发,我强烈建议再装一个虚拟机或者直接用Docker来跑Redis,因为Windows版的Redis官方不支持,GitHub上有第三方编译的版本但稳定性和性能都不如Linux原生版。后面我在常见问题章节会详细讲这块的坑。
2. 版本选型与下载安装的环境准备
2.1 JDK为什么必须是1.8
苍穹外卖这个项目在文档上标注的就是JDK 1.8,很多新手不理解,觉得既然有Java 17、Java 21这些新版,为什么还要用老掉牙的1.8?原因其实很现实:项目的基础框架Spring Boot使用的是2.7.x版本,这个版本的底层设计和部分依赖只保证在JDK 8到JDK 17之间跑得平稳,教程方为了最大限度减少环境差异,选择锁定JDK 1.8是最稳妥的。
换个说法,如果你用JDK 17去编译运行这个项目,大概率有一些第三方jar包会报模块访问错误,比如CGLIB代理、JAXB这些老库在JDK 9之后被移除了模块化支持。排查这些问题的成本,远比一开始装一个JDK 1.8高得多。所以我的建议是:跟着项目走,项目用什么版本你就装什么版本,等你有能力自己去升级框架解决了,再考虑换版本。
安装JDK时有个细节要注意,Windows下安装完成后需要手动配置环境变量。在系统变量里新增JAVA_HOME,值为JDK的安装路径,然后在Path变量里加上%JAVA_HOME%\bin。配置完成后,打开命令行输入java -version确认输出版本号是1.8。如果系统里之前装过其他版本的JDK,记得检查Path里是否有多余的旧路径,这个是最常见的版本冲突来源。
2.2 Maven的仓库镜像配置
Maven是Java项目的构建和依赖管理工具,苍穹外卖会用到Spring Boot、MyBatis、Redis等一堆依赖包,Maven会自动从中央仓库下载。问题在于,中央仓库的服务器在国外,国内网络环境下下载速度极慢,经常会卡在某个依赖上下不动。这时候就需要配置阿里云的镜像仓库,让依赖从国内镜像源下载。
配置文件在Maven安装目录下的conf/settings.xml,找到<mirrors>标签,在里面加上这一段:
<mirror> <id>aliyunmaven</id> <mirrorOf>central</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>配置完之后,跑一下mvn help:system命令,如果能看到下载日志里出现aliyunmaven字样,就说明镜像配置生效了。另外需要在IDE里把Maven的settings.xml路径指向你配置的这个文件,IDEA默认用的是自带的那份配置,需要手动改一下。
在我带过的项目里,至少有三成的新人栽在Maven配置这一步,表现是引入依赖后IDEA长时间卡在Resolving状态,或者项目一启动就报ClassNotFoundException。排查方向就是先确认仓库地址是不是阿里云镜像,再确认IDEA的Maven设置里User settings file是否选对了文件。
2.3 数据库与缓存的版本注意事项
数据库我建议直接用MySQL,版本5.7和8.0都可以。如果是从零开始,直接用8.0就行,安装向导会要求设置root密码,建议设成容易记住的(比如root),因为后续项目的配置文件里默认连接串就是jdbc:mysql://localhost:3306/sky_take_out,用户名密码都是root。如果你想改密码,记得同步修改后端项目里的application.yml。
Redis这个环节需要注意,前面提过Windows版本的问题。我的实践方案是本地装一个Docker Desktop,在Docker里跑一个Redis 6.2容器,这样最接近生产环境。如果你觉得Docker太重量级,也可以找一个编译好的Windows版Redis,但启动时经常出现Creating Server TCP listening socket *:6379: bind: No error这类端口冲突的报错,需要先检查6379端口是否被占用。
关于Nginx,它的作用是作为反向代理服务器,将前端请求转发到后端服务,同时托管前端静态资源。Windows下的Nginx解压即用,配置文件在conf/nginx.conf,后续做前后端联调时,需要在这里配置跨域转发规则,这部分在后面的实操章节会详细展开。
3. 后端运行环境的搭建流程
3.1 安装MySQL并导入初始数据库脚本
拿到项目源码后,一般会有一个sql目录,里面放着初始的数据库建表脚本sky_take_out.sql。在安装好MySQL后,需要手动创建数据库并导入这个脚本。
我用命令行方式演示一下(Windows或Linux通用):
mysql -uroot -p # 输入密码后进入MySQL命令行 create database sky_take_out default character set utf8mb4; exit;然后回到普通命令行,执行:
mysql -uroot -p sky_take_out < sky_take_out.sql导入成功后,可以登录MySQL查看表结构确认是否导入完整。这里判断导入成功的标志是能看到orders、dish、category、user等核心业务表。有的教程会提供图形化工具导入的方式,比如用Navicat,但如果你想在面试时说清楚这个环节,最好掌握命令行导入的方式。
数据库字符集统一使用utf8mb4,这点很重要。外卖这类业务涉及用户备注、菜品描述等文本信息,如果遇到特殊字符(比如emoji),只有utf8mb4能正常存储,utf8会报Incorrect string value错误。
3.2 导入后端项目并配置application.yml
后端项目代码导入IDEA后,需要重点关注这几个文件:
application.yml:框架核心配置,包含数据库连接、Redis连接、文件上传路径application-dev.yml:开发环境配置,通常覆盖application.yml中的内容pom.xml:Maven依赖清单
修改application.yml里的spring.datasource部分,确认你本地的MySQL端口、用户名和密码与配置一致。如果使用默认配置,不需要改动这些内容,因为教程里的默认值就是localhost:3306、root/root。
启动项目前,还要确认本地的Redis服务已经在运行。因为苍穹外卖的项目里,Redis不仅做缓存,还承担登录Token的存储,如果Redis没启动,项目会报连接超时。
执行启动类SkyApplication的main方法,看到控制台输出类似“Started SkyApplication in xx seconds”的日志,再配合端口号8080(或配置里指定的端口)出现Tomcat started on port字样,就说明后端启动成功了。
3.3 验证后端接口是否正常响应
后端启动后,可以用一个简单的HTTP请求来验证接口是否发起。
打开浏览器访问:http://localhost:8080/employee/login,会看到一个404或者405的响应,这代表服务在运行,只是没有正确的请求方式。也可以直接访问http://localhost:8080/,如果返回一个JSON格式的错误信息,说明HTTP层是通的。
更专业的验证方式是使用Postman或Apifox这类工具发送POST请求到登录接口,完整的请求体格式可以在项目文档里找到。我个人习惯用IDEA自带的HTTP Client文件来快速验证,新建一个.http文件,写上请求方法和参数即可,方便整个项目周期里反复使用。
4. 前端环境与联调配置
4.1 Node.js环境和npm镜像源
前端项目(通常是Vue编写)需要Node.js环境来运行开发服务器和打包构建。安装Node.js时直接去官网下载LTS版本,安装完成后在命令行验证:
node -v npm -vnpm是Node.js自带的包管理工具,默认下载源在国外,同样需要切换成国内镜像。执行下面这行命令即可:
npm config set registry https://registry.npmmirror.com切换完成后,进入前端项目根目录(通常是sky-take-out-front之类),执行npm install安装依赖。这个过程根据网络情况,可能需要几分钟到十几分钟不等。如果中途报错,常见的是node-sass这类依赖需要编译,而本地环境的Python版本或Visual Studio Build Tools不满足要求。这种问题直接切换成sass包可以绕过,或者按报错提示安装对应构建工具。
4.2 前端项目的启动与代理配置
依赖安装完成后,在项目目录执行npm run serve,开发服务器默认跑在http://localhost:8081。如果前端项目没有单独配置代理,请求后端接口时会遇到跨域问题,浏览器控制台会报No 'Access-Control-Allow-Origin' header is present。
解决方式有两种。一种是在后端的WebMvcConfiguration里配置跨域映射(CORS),把允许的来源地址加上。另一种更推荐的方式,是在前端项目根目录创建vue.config.js,配置开发服务器代理:
module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true } } } }这样前端发起的以/api开头的请求,就会被代理转发到后端的8080端口,绕开了浏览器的跨域限制。配置完成后需要重启npm run serve才生效。
整个环境跑通的标志性画面是:浏览器访问http://localhost:8081能看到管理端的登录页面,输入账户密码后能进入主界面,左侧菜单能正常渲染,后端控制台里能看到对应的SQL日志和Redis写入记录。
4.3 Nginx在项目中的作用
有的阶段教程会用Nginx将打包后的前端产物和后端服务统一挂在80端口下,模拟真实线上部署。这个环节虽然属于部署范畴,但如果想在环境搭建阶段就把后面的路铺好,可以提前把Nginx装好并理解它的配置。
基础配置思路是:前端打包后生成dist目录,将dist路径指向Nginx的root,将包含/api前缀的请求通过proxy_pass转发到后端服务。完整的配置模板后续在部署章节会用到,环境阶段只需要安装好Nginx,会做基础的start nginx操作确认它启动不报错就够了。
5. 常见问题与排查技巧实录
5.1 问题速查表,直接抄作业
我整理了一份环境搭建阶段最高频的问题清单,都是我实际带项目时帮别人排查过的,基本可以覆盖九成以上的坑:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| Maven依赖下载卡住不动 | 未配置阿里云镜像 | 修改settings.xml添加镜像源 |
| 启动项目报UnsupportedClassVersionError | JDK版本不对 | 确认JAVA_HOME指向JDK 1.8 |
| 连接MySQL报Access denied | 密码错误或用户权限不足 | 检查application.yml中的账号密码 |
| Redis连接超时 | Redis服务未启动 | 启动Redis,检查6379端口监听状态 |
| 前端npm install报node-sass错误 | 本机缺少编译环境 | 切换sass包或在项目目录重新安装 |
| 页面访问接口报404 | Nginx代理路径配置错误 | 检查location匹配规则 |
| 项目启动提示端口被占用 | 8080端口被其他服务占用 | 命令行执行netstat -ano | findstr 8080,结束对应进程 |
5.2 端口冲突的排查思路
端口冲突在环境搭建中出现的频率最高,尤其是8080端口,几乎每个Java后端的默认端口都是它,本机只要装过别的Java项目,就极易冲突。
排查思路分三步:
- 命令行执行
netstat -ano | findstr 8080,查看占用进程的PID - 打开任务管理器,在“详细信息”标签页找到该PID对应的进程
- 如果是没用的旧进程,直接结束任务;如果是有用的服务,修改本项目端口绕开
修改后端端口也很简单,在application.yml里改server.port的值即可。但要记住,如果改了后端端口,前端代理和Nginx配置里的目标端口也要同步修改,否则还是不通。我之前见过一个情况,改完后端端口却忘了改Nginx,前端页面的请求全部打到了旧端口上,排查了半个小时才找到问题。
5.3 关于MySQL和Redis的两个特别提醒
MySQL的时区问题。如果你的MySQL版本是8.0,连接串中最好加上时区参数:jdbc:mysql://localhost:3306/sky_take_out?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8。不加时区参数时,控制台会报The server time zone value '乱码' is unrecognized的警告,严重时会导致时间字段插入数据库后偏差8个小时。这个参数在教程的默认配置里可能没有写全,需要自己注意。
Redis的数据持久化。如果本地Redis是Docker跑的,容器删除后数据会全部丢失。环境搭建阶段虽然不涉及重要数据,但如果你用Redis存了登录Token,重新启动后旧Token失效,前端页面会跳回登录页。这不是bug,是Redis的内存特性。如果不想每次重新登录,可以在创建容器时挂载一个数据卷,具体命令在Docker文档里有,这里不展开写。
6. 收尾:环境跑通后的经验总结
到这里,整套苍穹外卖的环境就搭建完成了。回顾一下这个过程中容易出问题的环节,其实核心就是三个方面:版本一致性、镜像源配置、端口管理。只要这三块处理妥当,整个搭建流程半小时以内就能搞定。
我个人在实际操作中的体会是,环境搭建阶段一定不要跳过验证步骤。很多人在导入项目后看到IDEA不报错,就认为环境已经配好了,直到写业务代码启动服务时才暴露问题。正确的做法是,每一环安装后都立即验证:JDK用java -version、Maven用mvn -v、MySQL用命令行连接、Redis用redis-cli ping、前端用浏览器打开页面。这几颗零散的“锚点”全部确认无误后,再往后推进,才是学项目最稳妥的节奏。
如果你在搭建过程中遇到了教程之外的环境报错,先别急着百度完整报错信息,巧用关键信息搜索反而更快,比如报错堆栈中最核心的异常类名和报错行号。找到解决方案之后,再回头想想这个报错为什么会发生,这个习惯会让你的排错能力快速提升。环境问题没有什么高深的技术含量,但每次踩坑都是一次实操经验积累,等你自己能独立从零搭一套环境,项目的学习之路就成功了一半。
本文还有配套的精品资源,点击获取