Spring Boot项目环境搭建:JDK8+MySQL+Redis+Nginx实战避坑全攻略

📅 发布时间:2026/10/8 23:56:10
Spring Boot项目环境搭建:JDK8+MySQL+Redis+Nginx实战避坑全攻略
简介面向Java Web学习者的苍穹外卖项目环境搭建资料包聚焦外卖系统从数据库设计到前端展示的完整开发流程适合正在实战苍穹外卖项目、复习课程设计或需要掌握后端框架、关系型数据库、前后端交互等技能的初学者。资料共181个文件压缩包约5.96MB主要包含86个java源码文件、21张png图片、sql数据库脚本、xml与yml配置、js及css前端文件可覆盖后端业务代码、数据库初始化、页面样式、项目配置与本地服务启动等多个环节。已有4186人学习下载具广泛参考价值。包内目录结构清晰尤其适合对照后端自动配置、接口路径设计、Web服务器部署等知识点边看边练。资源还包含nginx及静态资源相关配置能帮读者理解常见前端资源发布方式有效减少环境搭建阶段的重复踩坑快速进入业务开发并积累完整的上手经验。1. 环境搭建资料不是安装包是一条能验证的链路拿到「苍穹外卖」这套项目资料时很多人第一反应是赶紧把代码跑起来结果花了一整天在装软件、改配置、看报错。这个项目是 Java 后端里少有的「前后端分离 管理端/用户端双端」完整案例环境搭建资料要解决的不是“把 MySQL 装上”而是“把数据库、Redis、后端进程、前端静态资源串起来让登录页能真正调通接口”。适合跟着教程做实战、准备简历项目或者想在这套代码上做二次开发的 Java 从业者。反直觉的是环境搭建的坑九成不是“装不上”而是“版本和你拿到的资料对不上”。2. 环境清单与版本选型JDK 8 为什么还是主角2.1 核心软件的版本清单与选型理由苍穹外卖是典型的 Spring Boot 单体工程教学基线普遍是 JDK 8。这不是资料老旧而是这个项目的依赖、插件、视频讲解都基于 JDK 8 验证过。你非要用 JDK 17 也不是不行但会遇到 Lombok 版本不兼容、Maven 编译参数调整这类额外问题环境搭建的意义就被稀释了。先把版本锁死跑通了再升级都不迟。软件推荐版本说明JDK1.88u201项目编译与运行基线避免 JDK 9 模块化报错Maven3.6.3依赖管理3.8 对镜像配置更敏感MySQL5.7 或 8.0两种都能用但 JDBC 驱动和时区写法不同Redis6.x仅做缓存5.x 也没问题Nginx1.20托管前端 dist 静态资源并转发接口请求IDEA2021.3 以上社区版够用重点还是编码与 Maven 设置如果你的机器上之前装过 JDK 17 或 MySQL 9建议不要卸载而是把 JDK 8 单独装好通过JAVA_HOME切换。JAVA_HOME要指向 JDK 安装目录本身不是里面的bin目录这个细节在 Java 环境变量配置里最容易出错。Maven 3.6.3 的localRepository默认在用户目录的.m2下如果你的资料里带了本地仓库可以手动替换能省掉大量下载时间。2.2 四条命令验证核心软件都没装错装完不是打开软件看一眼就完事第一步先把端到端的工具链验证掉java -version mvn -v mysql --version redis-cli ping nginx -vjava -version输出里必须看到1.8.0_xxx不是openjdk version 17之类。mvn -v会打印 Maven 版本和它使用的 Java 版本这里能顺带确认 Maven 有没有抓到正确的 JDK。redis-cli ping返回PONG才代表 Redis 服务可用如果没有启动后面后端启动日志里会报连接超时。Windows 下 Nginx 输入nginx -v输出到 stderr 是正常的不要以为命令坏了。这组命令全都通过后再打开资料里的项目工程。如果某一条失败先补环境变量再往下走别直接进 IDEA不然报错之后你分不清是依赖问题还是环境问题。2.3 资料目录怎么组织避免找不到要改的文件我见过的多数教程包会这样组织一个sql目录放数据库初始化脚本一个前端目录里面是编译好的dist静态资源一个后端工程目录里面带pom.xml。拿到资料后先按这个结构找文件别急着运行根目录下的 README 写的一行命令。后端工程的配置集中在src/main/resources/application.yml数据库脚本通常是.sql文件。前端如果是dist目录就代表它是构建产物不需要你执行npm install直接交给 Nginx 托管即可。搞清楚这三件事你就能理解下一步为什么先把 MySQL 和 Redis 搞定再去碰后端代码。3. 数据库与 Redis 初始化SQL 导入和缓存服务的两个关键动作3.1 导入 MySQL 脚本的三种方式与命令写法数据表结构没有建立后端跑起来也只是一个空壳。导入 SQL 脚本最常见的做法是命令行重定向mysql -uroot -p /path/to/sky.sql执行后输入密码注意命令行里不要在-p后面直接跟密码否则会留在 shell 历史记录里。导入前先确认脚本里的建库语句如果脚本没有创建数据库你需要手动创建并指定字符集CREATE DATABASE sky DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE sky; SOURCE /path/to/sky.sql;用SOURCE是另一种导入方式适合在 MySQL 客户端会话里执行能实时看到每步报错。如果你用 Navicat 或者 Workbench直接打开 SQL 文件运行也行但要注意工具连接时的字符集设置。导入完成后用USE sky; SHOW TABLES;看有没有表清单再确认几张业务表存在这比看日志更直接。导入方式适用场景常见坑mysql -uroot -p file.sql批量导入文件路径含中文导致编码乱码SOURCE file.sql在 MySQL 会话里逐步执行路径分隔符在 Windows 下要写正斜杠Navicat 运行新手友好连接库选错表建到别的库导入时如果脚本文件编码不是 UTF-8日志里会出现中文乱码或者语法报错尽量用文本编辑器转成 UTF-8 后再执行。3.2 Redis 的启动、连通性检查与密码配置后端进程启动时如果发现 Redis 没起来报错信息虽然只出现在一次接口调用里却会让人误判成代码问题。先把 Redis 跑起来并验证连通redis-server --daemonize yes redis-cli ping--daemonize yes让 Redis 以守护进程方式运行不会占住终端窗口。redis-cli ping返回PONG说明可连通。如果你拿到的资料里带了 Redis 配置文件启动时改成redis-server /path/to/redis.conf但要注意配置文件里daemonize是否被设成no。开发环境下 Redis 默认没有访问密码但有些教程资料会在配置里写死密码你必须看仔细。如果配置文件里设置了requirepass后端application.yml里必须同步填上密码否则接口请求到缓存时直接抛异常。检查 6379 端口是否在监听Linux 用ss -lntp | grep 6379Windows 用netstat -ano | findstr 6379看到 LISTENING 状态再往下走。3.3 application.yml 中四个必改配置项后端工程的数据库连接和 Redis 地址都写在application.yml里直接决定能不能连上你刚初始化的服务。核心配置如下spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/sky?useSSLfalseserverTimezoneAsia/ShanghaicharacterEncodingutf8 username: root password: 123456 redis: host: localhost port: 6379 password: 123456这里四个最容易踩的地方第一driver-class-name如果你用的是 MySQL 8必须是com.mysql.cj.jdbc.Driver旧资料里常见的com.mysql.jdbc.Driver在新驱动里已经被移除。第二serverTimezoneAsia/Shanghai必须带上否则 MySQL 8 会报时区无法识别的错误。第三Redis 的password是可选配置如果你没在 Redis 里设置密码这一行要么注释掉要么留空。第四数据库名sky要和你实际导入脚本建出来的库名严格一致大小写和单词拼写都不能差。配置项错误表现解决方式driver-class-nameClassNotFoundException改为com.mysql.cj.jdbc.Driverurl缺少时区参数The server time zone 报错追加serverTimezoneAsia/ShanghaiRedispasswordJedisConnectionException 或认证失败去掉或填对密码username/passwordAccess denied for user改为你本地 MySQL 实际账号改完配置后不急着启动后端先确认 MySQL 和 Redis 都活着。数据源和缓存是后端的两个前置条件顺序错乱会导致你后面排查问题时来回切窗口。4. 后端启动与前端静态资源让 8080 和 80 端口各司其职4.1 用 IDEA 导入后端工程并完成 Maven 依赖刷新打开 IDEA选择File - Open定位到后端工程的根目录选中pom.xml而不是选某个子目录。IDEA 识别到 Maven 工程后会自动开始导入依赖。如果右下角弹窗问你是否信任项目选信任如果问是否作为 Maven 工程导入选是。第一次导入时最怕依赖下载卡住。Maven 默认从中央仓库拉包国内网络环境下经常长时间无响应。你可以在 Maven 的settings.xml里配置镜像mirror idaliyun/id mirrorOfcentral/mirrorOf urlhttps://maven.aliyun.com/repository/public/url /mirror这段配置的意思是所有从中央仓库下载的依赖都改走阿里云的公共镜像。mirrorOf填central表示只对中央仓库生效不影响其他自定义仓库。改完settings.xml后回到 IDEA在 Maven 面板点刷新按钮观察右侧依赖列表有没有报错。依赖下载完成后编译一下mvn compile能过就说明后端工程本身没问题环境问题已经排除了一大半。4.2 启动类运行方式与“启动成功”的识别找到带main方法的启动类Spring Boot 工程的类名一般是*Application。直接右键运行观察控制台输出。启动成功的最低标准是看到类似Started SkyApplication in xx.xx seconds Tomcat started on port(s): 8080第一句话代表 Spring 容器完整启动第二句话代表内嵌 Tomcat 已经在 8080 端口监听。如果只看到第二句而没看到第一句说明可能还在初始化某些 Bean。启动过程中日志里出现红字不一定是失败但出现APPLICATION FAILED TO START就肯定是环境或配置问题。启动失败时最先看异常堆栈的Caused by部分不要看前十几行。常见的失败集中在数据源连接、Redis 连接、端口占用三类。如果 8080 被占了先查端口占用进程再决定改server.port。改端口要记得 Nginx 转发地址同步修改不然前端调用的接口仍然是旧的 8080。4.3 前端 dist 目录与 Nginx 静态托管配置前端资源是编译好的dist目录里面已经有index.html和一堆 JS/CSS 文件。你不需要装 Node.js也不需要执行构建命令只需要让浏览器能访问到这些文件。这里我通常选择用 Nginx 托管而不是直接双击index.html因为前端页面里的接口请求都是相对路径/api/...直接文件方式打开请求会落到file://协议下无法到达后端。在 Nginx 的conf/nginx.conf中找到server {}块改成下面这样server { listen 80; server_name localhost; root /path/to/dist; index index.html; location /api/ { proxy_pass http://127.0.0.1:8080; } }root指向前面说的dist目录location /api/的意思是把所有以/api/开头的请求转发给 8080 端口的后端。proxy_pass后面的地址没有写路径转发时会把原始 URI 完整带过去。这里最容易翻车的是路径Windows 下root要写盘符路径比如D:/project/sky/dist同时注意 Nginx 配置里路径分隔符统一用正斜杠。改完配置后执行nginx -t nginx -s reloadnginx -t用来检查配置文件语法输出syntax is ok才能继续。reload用来重载配置不需要重启 Nginx。刷新浏览器访问http://localhost能看到登录页就说明静态资源托管成功。4.4 统一启动顺序MySQL、Redis、后端、Nginx我一般严格按照这个顺序启动MySQL - Redis - 后端进程 - Nginx。原因是后端启动时会立刻连接数据库和 Redis如果这两个服务没就绪启动日志里的报错会误导你以为是代码问题。而 Nginx 只做资源托管和请求转发它对后端状态没有感知但必须在后端启动成功后再 reload否则接口前几次请求会返回 502。这个顺序也方便你每次开机后快速恢复环境先检查数据库和 Redis 服务状态再启动 IDEA 里的 Spring Boot 工程最后 reload 一次 Nginx。整个过程控制在两分钟内如果每次都卡住说明环境里存在某个服务自启动配置缺失回头看前面几章的检查命令。5. 环境搭建避坑五个容易翻车的边界场景5.1 MySQL 8 驱动类名不匹配导致启动失败现象后端启动时报ClassNotFoundException: com.mysql.jdbc.Driver或者Cannot load driver class。原因你本地装的是 MySQL 8驱动包也换成了新版本但资料里的application.yml还写着旧驱动类名。MySQL 8 的 JDBC 驱动把类改名成了com.mysql.cj.jdbc.Driver。解决把driver-class-name改成com.mysql.cj.jdbc.Driver同时确认pom.xml里 MySQL 依赖是mysql-connector-java8.x 版本。改完重启后端工程。如果你的资料本身就要求 MySQL 5.7那旧驱动类名反而没问题不要盲目照搬网上的新写法先确认资料里的数据库版本。5.2 数据库时区报错导致数据源初始化失败现象启动日志里出现The server time zone value ... is unrecognized有时后面还跟着一段乱码。原因MySQL 8 默认时区和 JDBC 驱动要求的时区不一致连接串里没有显式指定serverTimezone。解决在数据库连接 URL 末尾加serverTimezoneAsia/Shanghai。如果你改完仍报时区问题可以同时执行set global time_zone 08:00并在连接串里加useLegacyDatetimeCodefalse。这一步做完重启后端再看日志。5.3 Redis 连接被拒接口请求超时现象后端能启动但第一次调登录接口时日志报JedisConnectionException: Connection refused或者接口一直转圈。原因Redis 服务没有启动或者 Redis 绑定的 IP 不是本地地址也可能是application.yml里配了密码但 Redis 实际没设密码。解决先执行redis-cli ping返回PONG再继续。如果 PONG 都不返回回到第 3 章把 Redis 启动起来。如果返回正常检查配置文件里的password是否多余Redis 保护模式下只允许本机访问开发环境保持localhost即可不要为了局域网访问随便改bind 0.0.0.0。5.4 前端页面能打开但接口全部 404现象浏览器能看到登录页输入账号密码后没有反应F12 里看到/api/...请求返回 404 或 502。原因Nginx 的location /api/配置没生效或者后端工程的接口前缀不是/api。有时候还会遇到前端请求路径带/api后端接口的实际路径却是/employee/login不匹配。解决先在命令行直接访问后端接口curl http://localhost:8080/api/...能通就说明问题在 Nginx不能通则说明 Nginx 的转发路径和实际路径对不上。检查 Nginx 配置里proxy_pass是否和location的前缀搭配正确前端打包时写死的接口前缀尽量不要在后端用server.servlet.context-path再改一层。5.5 IDEA 与控制台中文乱码现象后端启动日志里的中文全部变成问号或者乱码控制台输出错位。原因IDEA 的文件编码没有统一为 UTF-8或者数据库连接串里缺少characterEncodingutf8导致 SQL 里的中文数据解析失败。解决打开 IDEA 的Settings - Editor - File Encodings把 Global Encoding、Project Encoding、Properties Files 都设为 UTF-8。application.yml的文件编码也确认是 UTF-8。再给启动类加上运行参数-Dfile.encodingUTF-8重启后看日志是否恢复。这个坑不是每次必现但一出现会连带数据库里写入的中文变成乱码影响后面所有接口联调。6. 用最小闭环验证环境从登录页到管理端接口一次跑通环境搭建完成的标准不是“服务都起来了”而是“登录接口能返回数据”。第一步直接调后端接口curl -X POST http://localhost:8080/api/employee/login \ -H Content-Type: application/json \ -d {username:admin,password:123456}这里的路径前缀/api/employee/login是苍穹外卖管理端常见的接口形式账号密码以资料里的预置账号为准。如果返回的 JSON 里带code和token字段说明后端、数据库、Redis 整条链路已经通了。如果curl都通了但浏览器登录失败问题只在前端资源路径或 Nginx 转发不要再怀疑环境。接着打开浏览器访问http://localhost进入登录页输入账号。打开 F12 的 Network 面板刷新页面并登录观察第一个接口请求的状态码。如果登录成功并跳转到主页整个环境搭建就真正完成了。最后给你一个习惯把application.yml、Nginx 配置、数据库导入脚本这三样打包备份命名带上当前日期。这个备份会在你改坏配置、系统重装、或者换电脑时变成后悔药。我就是靠这个习惯在新电脑上十五分钟恢复过一个完整的开发环境没有重新踩一遍前面的坑。希望帮到你。本文还有配套的精品资源点击获取