十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Spring Boot商城项目实战:从解压到部署全流程解析

Spring Boot商城项目实战:从解压到部署全流程解析 简介这是一套面向Java与Vue全栈开发者的学习型电商项目实战资源聚焦SpringBootVue技术栈的完整商城系统落地实践适用于高校学生课程设计、求职面试准备及中级工程师技术深化。资源包含前后端可运行源码、配套SQL建表与初始化脚本覆盖用户管理、商品上架、店铺运营、订单流转、促销统计等核心业务模块并深度集成Redis缓存优化、MyBatis动态SQL操作、JWT无状态鉴权及Vue全家桶Vue Router/Vuex/CLI构建体系。压缩包共1598个文件含107个Java后端服务类、248个JS前端逻辑文件、84个CSS样式文件、93个JPG/PNG商品图素材及1个关键SQL脚本整体125.68MB结构清晰、模块解耦便于分层调试与功能扩展。已有1169人学习下载开箱即用助读者快速掌握电商系统从数据库设计、接口开发到界面交互的全流程实现逻辑。 最近我拿到一个很有意思的项目压缩包名字叫“springboot商城(前后端代码sql脚本).zip”。这名字一看就很实在典型的Java后端学习/毕设/中小企业快速交付项目结构Spring Boot做后端接口Vue或者其它前端框架做页面MySQL数据库脚本直接给你解压就能跑。对很多刚接触Spring Boot全家桶的朋友来说这种完整项目包比零散的教程有价值得多因为你能看到一套代码从前端到数据库是怎么串起来的。这篇文章我不打算只讲“怎么解压、怎么导入、怎么启动”这种照本宣科的东西。我会结合这个项目包里最常见的结构把Spring Boot商城项目从拿到压缩包到最终部署上线的完整链路拆开揉碎讲清楚每一步背后的原理以及哪些位置最容易踩坑。无论你是准备拿它做课程设计还是想通过阅读源码理解企业级项目结构又或者是想把它改造成自己的商业项目这篇内容都值得你花十分钟看完。1. 拿到压缩包之后千万别急着双击解压很多人一拿到zip文件习惯性直接双击看到里面一堆文件夹就开始往IDEA里拖。这个习惯在遇到“springboot商城”这种项目包时特别容易出事因为这类压缩包里往往同时包含多个独立工程后端一个文件夹、前端一个文件夹还有SQL脚本、README文档、配置文件等。如果直接全选解压到当前目录很容易把目录结构弄乱后面导入IDE时各种路径对不上。我的建议是动手之前先做两件事第一看压缩包的大小和文件数量心里有个数第二解压时单独创建一个专门的目录比如D:\projects\shop-mall把zip解压到这个目录下保证所有文件都收拢在一个干净的根目录里。这一步看似简单但能避免后面百分之八十的路径混乱问题。解压时还有一个很现实的问题中文文件名乱码。很多项目包的作者是中文环境压缩包里的文件夹叫“后端代码”、“数据库脚本”如果你的系统默认编码不是UTF-8解压出来就是一堆乱码文件夹名。这会导致IDEA识别项目名称异常甚至Maven编译时找不到路径。解决办法是用支持指定编码的解压工具比如Bandizip、7-Zip在解压时手动选择“UTF-8”编码。还有更极端的情况你下载的zip本身是损坏的解压时提示“File is not a zip file”或者“invalid zip archive: could not find eocd”。这个时候先别怀疑工具先用命令行验证一下文件完整性Linux/Mac可以用file xxx.zipWindows可以用PowerShell的Get-FileHash比对一下下载页面的校验值。如果文件大小和源站对不上直接重新下载别浪费时间在修复上。解压完成后第一眼应该去看什么不是代码而是项目根目录下的README或者部署文档。正规的商城项目包一定会写清楚环境要求JDK版本、MySQL版本、Node版本、启动步骤、默认账号密码。如果作者没写那就得自己从代码里找配置信息这个后面我会细讲怎么排查。2. 项目整体设计思路拆解这个商城项目到底是怎么组织的把压缩包解压开你会看到典型的“前后端分离”结构。我先画一个大致的轮廓让大家在导入IDE之前就对整个项目有个全局认识这样读代码时才不会迷路。先看后端几乎必然是Spring Boot工程用Maven构建。核心目录结构是这样shop-backend/ ├── pom.xml # Maven依赖与构建配置 ├── src/main/java/com/example/shop/ │ ├── ShopApplication.java # Spring Boot启动类 │ ├── controller/ # 控制层处理HTTP请求 │ ├── service/ # 业务逻辑层 │ ├── mapper/ # MyBatis数据访问层 │ ├── entity/ # 数据库实体类 │ ├── config/ # 配置类拦截器、跨域、Swagger等 │ ├── common/ # 通用返回结果、异常处理、工具类 │ └── util/ # 工具类 └── src/main/resources/ ├── application.yml # 主配置文件 ├── mapper/ # MyBatis的XML文件如果有 └── static/ # 静态资源一般不用再看前端通常是Vue项目Vue 2或者Vue 3具体看package.json目录结构大概是shop-frontend/ ├── package.json ├── vue.config.js # Vue CLI配置文件重点是代理 ├── src/ │ ├── api/ # 封装axios请求接口 │ ├── views/ # 页面组件 │ ├── router/ # 前端路由 │ ├── store/ # Vuex或Pinia状态管理 │ ├── components/ # 公共组件 │ └── utils/ # 工具函数 └── public/数据库脚本一般放在一个单独文件夹里比如sql/或者database/里面通常是1到3个SQL文件有的是结构脚本建表语句有的是数据脚本初始化的商品、用户和管理员数据有的干脆结构数据写在一个文件里。为什么我要花篇幅讲这个结构因为很多朋友拿到代码后喜欢从controller开始一个个文件点开看结果看了一堆接口却不知道这些接口是为哪个页面服务的。正确的方式是先看数据库设计再看后端的实体类和接口最后对照前端页面去理解一次完整的交易流程。这就好比看一幅拼图先看包装盒上的成品图再一块块拼效率最高。商城类项目的核心业务模块翻来覆去就是那几个用户模块注册、登录、地址管理、商品模块分类、列表、详情、搜索、购物车模块加购、修改数量、删除、订单模块创建订单、订单列表、订单详情、取消订单、支付模块很多课设项目会用模拟支付。如果项目包里有秒杀、优惠券、积分这些功能那属于加分项核心链路还是围绕“用户-商品-订单”这条主线。理解了这个主线你看代码的时候心里就有谱了用户登录后拿到token带着token去请求商品接口加购时提交商品ID和数量下单时把购物车数据转成订单数据。所有的异常、状态流转、金额计算都是为这条主线服务的。3. 数据库准备与SQL脚本执行的正确姿势前面说了拿到项目先看SQL脚本。这里说的“看”不是双击用记事本打开扫一眼而是要搞清楚三个问题这个脚本是给哪个版本的MySQL写的脚本里有哪些库表脚本是纯结构还是结构数据3.1 先检查SQL脚本的适用版本很多老项目的SQL脚本是基于MySQL 5.7写的里面可能用了ENGINEInnoDB DEFAULT CHARSETutf8这没问题MySQL 8.0也能兼容。但有些脚本里可能含有utf8mb4_unicode_ci排序规则、或者某些关键字在新版本里变成了保留字执行时会报错。我自己遇到的坑是脚本里建表没问题插入数据时出现了Incorrect string value错误那是因为表结构是utf8但插入的数据里包含Emoji表情比如用户的昵称这时候就要把表改成utf8mb4。如果你用的是MySQL 8.0.46这类新版本热词里也有mysql-8.0.46-winx64 zip下载安装建议先看一眼脚本的字符集声明有必要的话全局替换成utf8mb4。另外MySQL 8.0默认的认证插件是caching_sha2_password如果项目里的数据库驱动版本太老比如mysql-connector-java 5.x连接时会报Unable to load authentication plugin。解决方法是把驱动换成com.mysql.cj.jdbc.Driver并且在连接URL上加上serverTimezoneAsia/ShanghaiuseUnicodetruecharacterEncodingutf8。3.2 执行SQL脚本的正确顺序和方法这里我强烈建议用命令行或者Navicat/DataGrip的脚本执行功能而不是直接复制粘贴到命令行窗口。因为商城项目的脚本往往有几十张表直接复制容易出现格式错乱。正确分三步走第一步在MySQL里创建一个专用数据库名字跟后端application.yml里配置的一致。比如配置里写的是jdbc:mysql://localhost:3306/shop_mall你就先执行CREATE DATABASE shop_mall DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;。第二步选中这个数据库再执行项目提供的SQL脚本。如果你用的是命令行可以先use shop_mall;然后source /path/to/shop.sql;。用DataGrip或者Navicat的话直接打开SQL文件选择目标数据库然后运行。第三步验证数据是否完整。跑完脚本之后别急着关先查一下核心表的数据量。比如商品表product、用户表user、订单表orders是不是有数据。很多项目的SQL脚本只建表不插数据这时候你登录商城看到的商品列表是空的会误以为后端接口有问题。有一类坑特别典型SQL脚本里如果包含DROP TABLE IF EXISTS那你执行多次也不会报错但如果是纯CREATE TABLE不带IF NOT EXISTS第二次执行就会因为表已存在而中断。所以执行脚本之前最好确认一下当前数据库是否干净。3.3 解读商城核心表结构读懂了才能改得动SQL脚本执行成功后我会习惯性地把核心表结构拉出来快速过一遍。商城项目再怎么变化核心表就那几张user用户表存用户名、加密后的密码、手机号、头像、状态等字段。注意密码字段正常是密文如果项目里的密码是明文说明这个项目偏教学上线前必须改成BCrypt加密。product商品表主键、商品名称、价格、库存、图片地址、详情描述、上下架状态、创建时间。价格字段要注意小数位一般是DECIMAL(10,2)。product_category商品分类表分类ID、分类名称、父分类ID用来做无限级分类。cart购物车表用户ID、商品ID、购买数量、选中状态。一般购物车表跟用户、商品表都有外键关联但有些项目为了性能不建物理外键只保留逻辑关联。orders订单表订单号、用户ID、总金额、支付状态、发货状态、收货地址快照、下单时间。注意订单表一般跟用户表、订单明细表是1对多的关系。order_item订单明细表订单ID、商品ID、商品名称快照、商品图片快照、商品单价快照、购买数量。这里为什么要做“快照”因为商品的价格和名称随时可能改但订单生成后必须保留下单那一刻的信息这就是“快照”的意义。如果你打算二次开发这三张表的关联关系必须吃透用户下单后系统先根据购物车记录生成订单主记录再生成订单明细然后清空购物车最后扣减库存。整个链路只要一环出错订单数据就会对不上。4. 后端启动全流程Spring Boot配置、常用注解与常见启动失败原因后端是Spring Boot工程导入IDEA之后第一件事就是让Maven把依赖拉下来。这里我必须提醒一句不要用IDEA内置的Maven设置去跑老项目很容易因为版本不对导致各种莫名其妙的编译错误。建议在pom.xml上右键选择“Maven - Reload Project”然后用命令行mvn clean install -DskipTests先把整个项目编译一遍。这一步能提前暴露依赖缺失和代码编译错误。4.1 解读application.yml这个文件能告诉你项目的一切启动不起来的项目百分之八十的问题出在application.yml上。这个文件就是Spring Boot的总开关改错了直接启动失败或者连不上数据库。我建议拿到项目后第一时间打开这个文件逐行检查几个关键配置。首先是server.port确认后端端口号常见的是8080。如果这个端口被占用启动时会报Port 8080 was already in use。解决办法要么换端口要么找到占用端口的进程干掉。Windows下用netstat -ano | findstr 8080查看PID然后taskkill /PID 进程号 /F。然后是数据源配置重点看这三行spring: datasource: url: jdbc:mysql://localhost:3306/shop_mall?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/ShanghaiuseSSLfalse username: root password: 123456如果项目启动报数据库连接异常先不要怀疑代码用命令行直接测一下你本地的MySQL能不能用这个账号密码登录。很多时候是项目里密码是123456你本地数据库密码是root不改配置永远连不上。再接下来是MyBatis相关配置。如果是MyBatis-Plus项目会看到mybatis-plus前缀的配置包括mapper XML的位置、日志级别、驼峰映射等。如果是传统MyBatis注意mapper-locations路径是否指向classpath:mapper/*.xml如果XML文件放在别的位置没被扫描到运行时会报Invalid bound statement (not found)。4.2 启动类的奥秘SpringBootApplication到底做了什么Spring Boot的启动类上只有SpringBootApplication一个注解但这个注解是三个注解的组合SpringBootConfiguration标明这是一个配置类、EnableAutoConfiguration开启自动配置、ComponentScan扫描当前包及其子包下的所有组件。这里有一个很关键的坑ComponentScan默认只扫描启动类所在包及其子包。如果你把ShopApplication.java放在com.example.shop下但是controller写在com.example.controller下那Spring容器根本扫描不到启动不会报错但接口全部404。所以拿到项目后先确认启动类的位置确保它在包结构的根上。启动类本身没什么好改的但如果项目里有额外的配置类需要加载可以在启动类上加ImportResource或者MapperScan。绝大多数商城项目会在启动类或者配置类上加MapperScan(com.example.shop.mapper)告诉MyBatis去哪里找Mapper接口。如果这个注解没加或者路径不对启动时不会报错但运行任何数据库操作都会报Invalid bound statement。4.3 Spring Boot常用注解读完这十几个就能看懂大部分代码市面上的Spring Boot面试题喜欢问“常用注解有哪些”但如果你是为了读代码不需要背那么多抓住这些就够用了RestController控制层组合注解表示这是一个处理HTTP请求的控制器且方法默认返回JSON。RequestMapping/GetMapping/PostMapping映射URL和HTTP方法到具体处理方法。PathVariable从URL路径中取参数比如/user/{id}。RequestParam从查询字符串或表单中取参数可以设置requiredfalse和defaultValue。RequestBody把请求体中的JSON自动转换成Java对象。Autowired依赖注入让Spring自动把对象实例装配进来。Service标注业务层类让Spring管理。Mapper标注数据访问层接口让MyBatis为它生成代理实现。Entity/TableName实体类映射数据库表后者是MyBatis-Plus的注解。Configuration标注配置类类中可以用Bean声明Bean。Transactional标注事务方法中任何一个操作失败整个方法的数据操作回滚。CrossOrigin解决跨域问题加在Controller类上或者配置类里统一处理。Validated/Valid参数校验配合NotNull、NotBlank等在实体字段上做校验。我见过不少朋友读代码时一路追着注解看看到最后忘了自己要看哪个核心流程。我的建议是先找到controller包从一个核心业务接口比如“用户登录”开始顺着Controller - Service - Mapper - SQL这条路走一遍比逐个文件读效率高十倍。4.4 后端启动失败的高频原因速查后端项目启动报错是每天都会有人问的问题。我整理了一个快速排查表大家按顺序对照检查大概率能解决错误现象可能原因解决办法Port 8080 was already in use端口被占用换端口或杀掉占用进程Failed to configure a DataSource数据源配置缺失或无法连接检查application.yml里的url/username/passwordInvalid bound statement (not found)Mapper接口与XML映射没配对检查MapperScan路径和XML文件位置Unknown database shop_mall数据库没创建先执行CREATE DATABASEAccess denied for user rootlocalhost数据库密码不对修改配置里的密码Caused by: java.sql.SQLException: The server time zone valueJDBC连接时区问题URL加serverTimezoneAsia/ShanghaiClassNotFoundException: com.mysql.cj.jdbc.Driver驱动版本过旧或依赖缺失升级mysql-connector-java到8.x有一个容易被忽略的细节Spring Boot 2.x和3.x的差异。2.x基于JDK 8/113.x最低要求JDK 17。如果你本地装的是JDK 8但项目是基于Spring Boot 3.x写的那编译阶段就会报错。反过来也一样。热词里有人问“idea新建项目没有springboot 3.4.3选项”大概率是IDEA版本太老。升级IDEA到最新版或者手动在pom.xml里指定Spring Boot父版本。5. 前端项目的启动与调试从Node版本到接口联调前端项目多是Vue工程启动前先确认两件事Node.js环境装没装npm镜像是不是能正常访问。国内环境建议先把npm源切到淘宝镜像不然npm install卡半天。对于Vue项目来说我建议使用固定版本的Node因为Vue 2项目在Node 17以上的版本里可能会报OpenSSLError原因是webpack 4依赖的OpenSSL和Node新版本冲突。解决办法是把Node降级到16或者在package.json的scripts里加上NODE_OPTIONS--openssl-legacy-provider。Vue 3 Vite项目一般对Node版本要求不高但也不要太老。npm install之后运行npm run serve或者npm run dev前端默认端口一般是8080后端的接口地址一般是http://localhost:8080或http://localhost:8081。这两个端口如果完全一样就会有一个起不来。实际项目中前端配置了代理把/api开头的请求转发到后端真实地址。这个代理配置是最容易出问题的地方。Vue CLI项目在vue.config.js里配置module.exports { devServer: { port: 3000, proxy: { /api: { target: http://localhost:8080, changeOrigin: true } } } }如果你的前端页面能打开但登录时提示“Network Error”或“Request failed with status code 404”大概率是代理没生效或者后端启动的端口和target不一致。还有一种情况是后端接口的context-path有前缀比如server.servlet.context-path: /shop那代理就要写成target: http://localhost:8080/shop。登录功能的联调是检验前后端是否连通的试金石。正常流程是前端提交用户名和密码后端校验通过后返回一个token可能是JWT前端把token存到localStorage或者Vuex里后续所有请求都在header里带上Authorization: token。后端通过拦截器或过滤器校验token。如果登录能成功但之后访问数据接口仍报401那基本是token没传或者拦截器校验逻辑有出入。我建议在浏览器F12里打开Network面板直接看登录接口的请求和响应比对一下后端的返回值结构。很多商城项目会定义一个统一的返回结果类ResultT包含code、message、data三个字段。前端封装axios时会对code做判断如果后端返回的code跟前端判断的不一致就会出现“请求成功但业务报错”的诡异问题。6. 项目二次开发的前置功课理解订单核心链路与权限控制拿到商城项目如果只是启动起来登录一下、逛一圈商品、假装下单成功那其实什么都没学会。我建议你看代码的时候带着问题去看重点关注两条线一是“订单创建”这条核心业务链路二是“用户权限控制”这套机制。6.1 订单流程代码追踪从“提交订单”这个按钮开始后端对应的Controller通常是/order/create或者/order/submit。前端会把购物车里选中的商品ID列表和收货地址ID一起提交过来。换成Java代码的视角后端做这几件事先根据用户ID查出选中的购物车记录再根据商品ID批量查出商品的最新价格和库存然后计算总金额再生成订单主记录和订单明细记录最后清空购物车并扣减库存。整个过程必须加上Transactional不然任何一个环节失败都可能造成订单和库存对不上。这里有一个特别实际的细节金额计算。很多课设项目直接把前端传来的总金额作为订单金额存到数据库这是非常危险的。正确做法是后端根据商品单价和数量重新计算总金额前端传的金额只能作为参考。因为接口可以被任何人伪造如果金额是前端传的黑客把总金额改成0.01那商城就亏死了。你读代码时留意一下如果后端没有重新计算金额说明这个项目离上线还差得远。6.2 权限控制的实现套路用户登录后访问其他接口后端怎么知道当前请求是哪个用户常见做法是JWTJSON Web Token。登录成功后后端生成一个包含用户ID和过期时间的token返回给前端。前端每次请求都在HTTP Header的Authorization字段带上这个token。后端写一个拦截器在请求进入Controller之前先解析token如果token无效或过期直接返回401。这个拦截器在代码里一般长这样public class JwtInterceptor implements HandlerInterceptor { Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String token request.getHeader(Authorization); // 校验token无效则抛出异常由全局异常处理器返回401 return true; } }然后在配置类里注册这个拦截器并指定放行路径比如/user/login、/product/list不需要登录就能访问其他接口必须登录。还有个常见细节是管理员权限商城的后台管理接口比如商品管理、订单发货会再校验一次角色的isAdmin字段不是管理员直接拒绝访问。如果你需要做后台管理功能这部分的代码逻辑值得仔细看。6.3 接口文档和调试工具的使用项目里如果集成了Swagger那调试起来会方便很多。访问http://localhost:8080/swagger-ui.htmlSpring Boot 2.x或者http://localhost:8080/swagger-ui/index.htmlSpring Boot 3.x能看到所有接口的在线文档可以直接在页面上测试接口。热词里有人问“springboot增加swagger”就是在pom.xml里加springdoc-openapi或者springfox的依赖然后加一个配置类。我个人更推荐springdoc-openapi因为swagger2在Spring Boot 2.6会出现Path pattern冲突的问题。如果项目没集成Swagger那就用Apifox或者Postman。把登录接口跑通拿到token后在Apifox里设置全局变量后续接口自动带token效率比手工复制粘贴高得多。7. 部署上线把项目移植到Linux服务器项目在本地跑通之后很多人下一步就是部署到云服务器。这个环节也是坑最多的我这里重点讲Linux环境下的部署关键步骤。7.1 后端打包先在本地或者服务器上执行mvn clean package -DskipTests打包成功后target目录下会生成一个shop-0.0.1-SNAPSHOT.jar文件。这就是一个可以直接运行的Spring Boot应用。上传到服务器后用命令启动java -jar shop-0.0.1-SNAPSHOT.jar --spring.profiles.activeprod这里有一个细节application.yml里如果同时有application-dev.yml和application-prod.yml用--spring.profiles.activeprod指定使用生产环境配置。生产环境的数据库地址、账号密码、日志级别跟本地不一样要提前改好。如果服务器内存比较小可以给JVM限制一下内存java -Xms256m -Xmx512m -jar shop-0.0.1-SNAPSHOT.jar现在很多项目都推荐用Docker部署写一个DockerfileFROM openjdk:8-jdk-alpine COPY shop-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT [java,-jar,/app.jar]然后构建镜像并运行容器。这个方案的好处是环境隔离不用担心服务器上JDK版本不匹配。K8s部署就更进一步了但对单体商城项目来说有点杀鸡用牛刀除非你是为了练手学习K8s的Deployment、Service、ConfigMap这些概念那倒是个好场景。7.2 Linux上解压zip和传输文件你拿到的是一个zip包如果在服务器上操作需要用到unzip命令。先安装# Ubuntu/Debian apt-get install unzip -y # CentOS yum install unzip -y解压unzip springboot商城\(前后端代码sql脚本\).zip -d /opt/shop注意压缩包文件名里有中文和括号命令行里最好用Tab键自动补全避免手输中文出错。解压后执行ls -la确认目录结构正常。如果服务器上没有unzip也可以用jar命令解压zip格式跟jar是同源的但不如unzip直观。另外文件名里的括号在shell里是特殊字符不加引号或者不转义会被shell解析错误这是热词里“linux命令解压zip文件”相关提问最常见的翻车点。7.3 前端构建与Nginx配置Vue前端打包npm run build打出来的dist目录是纯静态文件用Nginx托管。一个最小可用的Nginx配置server { listen 80; server_name your-domain.com; root /var/www/shop-frontend/dist; index index.html; location /api/ { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }这里的关键是location /api/的代理转发所有以/api/开头的前端请求都会转发到后端8080端口。注意proxy_pass后面的URL如果带路径跟不带路径的转发规则完全不同部署时报404多半就是这里写错了。前端路由如果是history模式Nginx还需要配置try_files否则刷新页面会404location / { try_files $uri $uri/ /index.html; }8. 常见问题与排查技巧实录最后这部分我把常见问题整理成一个速查表这些问题是我在实际折腾Spring Boot商城项目过程中遇到过的也符合最近大家经常搜索的那些关键词。8.1 zip相关问题的完整排查思路“File is not a zip file”是下载场景里最经典的问题。原因一般是下载不完整或者下载到的是一个HTML错误页面下载链接需要登录、防盗链等。排查方法用浏览器重新下载不要用下载工具下载后比较文件大小用zip -T file.zip测试完整性。还有一类问题是“导入资源包失败Caused by: invalid zip archive: could not find eocd”。EOCD是zip文件结尾的记录标志找不到说明文件被截断。这常见于从GitHub下载zip时网络中断或者某些网盘下载的文件不完整。重新下载或者换一个网络环境基本能解决。8.2 数据库相关问题的排查问题现象可能原因处理方式SQL脚本执行一半报错脚本里有重复创建表或字符集问题先DROP掉相关表再执行或逐段执行中文乱码连接URL没有指定characterEncoding在JDBC URL上加characterEncodingutf8登录提示密码错误数据库里存的密码是密文但你输入明文检查用户表密码字段确认加密方式时区报错JDBC 8.x要求指定serverTimezoneURL加serverTimezoneAsia/Shanghai8.3 Spring Boot启动与编译问题问题现象可能原因处理方式Maven依赖下载慢或失败默认中央仓库不稳定配置阿里云Maven镜像Cannot resolve symbol springframework依赖未下载或IDEA索引异常执行mvn clean install重启IDEA启动后访问接口404启动类包路径不对或Controller没扫描到检查启动类位置和RestController注解接口返回但数据为空MyBatis查询结果没映射上检查XML里的resultMap和字段命名上传文件大小超限默认限制1MB在yml里配置spring.servlet.multipart.max-file-size8.4 一套通用的“项目跑不起来”排查顺序很多朋友一上来就各种百度其实可以按照这个顺序自查先确认了压缩包解压完整再看数据库脚本执行成功且表里有数据再看后端有没有启动成功日志有没有Started ShopApplication然后用浏览器直接访问后端接口比如http://localhost:8080/product/list确认后端没问题最后才是启动前端改代理。这个顺序每个环节都验证一遍所有报错都会变得很清楚。我个人在实际操作中的体会是拿到一个陌生的商城项目包最怕的不是代码复杂而是“没有头绪”。如果你按照“解压检查 - 数据库初始化 - 后端启动 - 前端联调 - 部署上线”这条路走一遍任何Spring Boot商城项目在你手里都能快速跑起来。而且跑通一次之后你会对整个前后端分离架构有比看十篇教程都更深刻的理解。最后再分享一个小技巧项目跑通之后记得把数据库脚本和前后端配置里的初始账号密码做一次完整梳理把默认管理员密码改掉。这个看起来不起眼的操作会让你在后期二次开发时省掉很多不必要的麻烦。毕竟商城项目再怎么变核心永远是“数据”和“权限”这两件事提前把它们理清了后面的路就顺了。本文还有配套的精品资源点击获取
返回列表