部署手册 迭代2 - xiaochu-dev/online-shopping-group5 GitHub Wiki
在线购物系统 部署手册(迭代2 · Java版)
初稿:胡成溯(组长),2026-10-06;v2.0修订2026-10-20;本次v2.1于2026-10-22按671ae63同步。Python版部署保留在部署手册。
1 代码与环境
代码获取:当前仓库默认分支 main 仍为迭代1 Python版本。迭代2 Java代码和已合入的商品中心在 iter2-java。
- 打开Java分支
- 直接下载Java分支ZIP(网页下载前也可先切换分支再点 Code → Download ZIP)
git clone -b iter2-java https://github.com/xiaochu-dev/online-shopping-group5.git
cd online-shopping-group5
目标JDK17、Maven3.9+、现代浏览器。java -version和mvn -v应指向同一预期JDK。Spring Boot3要求至少Java17;本机JDK25已完成源码启动和带兼容开关的83项测试,团队Java17运行仍待复现。
2 数据初始化与升级
默认数据库jdbc:sqlite:./data/shop.db,图片保存./uploads/,二者都相对启动时工作目录。应用创建所需目录,并依次执行schema/00-base.sql、01-buyer.sql、02-product.sql、03-intent.sql,共六张业务表。
新库种子账号为admin / admin12345,已有卖家不会被种子SQL覆盖。默认五个一级分类,没有预置二级分类;先在/admin/categories新增一个启用的二级分类,再发布商品。商品必须归入启用的二级类。
旧Java商品表由ProductSchemaMigrator先一致性备份、再事务升级,保留商品编号及关联。IntentSchemaMigrator遇到没有buyer_id的旧表会重建意向表并丢弃旧匿名意向;因此升级前要停写、备份数据库与uploads,先在副本核对订单保留策略。新库幂等初始化不等于任意旧库无损升级,详见数据库设计-迭代2。本次未改动原始业务库。
3 启动
在含pom.xml的项目根目录执行:
.\mvnw.cmd spring-boot:run
或双击run.bat,已有Maven可执行mvn spring-boot:run。IDEA打开项目,使用JDK17运行com.group5.shop.ShopApplication。停止时使用Ctrl+C或IDE停止按钮。
中文路径下的替代启动方法
本机曾遇到Wrapper/插件在中文路径中无法找到主类;使用已安装Maven编译并输出运行依赖,再直接启动:
mvn compile dependency:build-classpath '-Dmdep.includeScope=runtime' '-Dmdep.outputFile=target/runtime-classpath.txt'
$shopClasspath = (Join-Path (Get-Location).Path 'target/classes') + ';' + (Get-Content -Raw 'target/runtime-classpath.txt').Trim()
java -cp $shopClasspath com.group5.shop.ShopApplication --server.address=127.0.0.1 --server.port=8080
该写法为Windows路径分隔符。目标为本机演示时显式设置server.address;application.yml本身没有配置回环地址,不能写成默认只监听127.0.0.1。
4 访问与登录态
| 路径 | 功能 |
|---|---|
/ |
公开列表、两级分类筛选、关键词搜索 |
/products/{id} |
在售/交易中详情;已下架返回不存在 |
/buyer/register、/buyer/login |
买家账号入口 |
/my/orders |
当前买家的成功/失败订单 |
/login、/admin |
卖家登录、后台首页及改密 |
/admin/categories |
分类新增、启停、空类删除 |
/admin/products |
商品发布、库存、下架与重新上架 |
/admin/intents |
意向队列、确认交易与标记结果 |
/admin/customers |
客户列表及购买历史 |
/admin/diagnostics |
数据源及页面实际列出的表结构 |
默认端口8080,地址以http://localhost:8080开头。卖家使用HttpSession的SHOP_SESSION,买家使用独立签名BUYER_SESSION,可同一浏览器并存。进程重启后买家须重新登录。演示前修改默认卖家密码。
5 配置与问题处理
| 项目 | 当前配置或处理 |
|---|---|
| 端口冲突 | 启动参数--server.port=8081;或环境变量SERVER_PORT,不是SERVER__PORT |
| 数据库路径 | --spring.datasource.url=jdbc:sqlite:./data/demo.db;另用副本时保持uploads对应关系 |
| 数据库打不开 | 核对当前工作目录、父目录存在与写权限 |
| SQLITE_BUSY | 检查其他进程/写事务,不把连接池1和WAL等同压力测试结论 |
| 上传上限 | 容器6MB/文件、50MB/请求;服务仍限制最多9图、5MiB/张,且验证格式与解码 |
| 登录失败 | 核对账号是否改密、使用的数据库是否正确,不删除数据目录重置 |
| 启动JDK不对 | 检查JAVA_HOME及mvn -v;只改PATH中的java不足以保证Maven选对JDK |
6 演示核对
- 卖家登录,新建启用的二级分类,发布多个商品(含库存、9图排序和主图)。发布后没有改名、改价、改描述、改图或删除入口。
- 匿名浏览、分类筛选与搜索;注册买家并登录后提交意向,不扣库存、不生成口令码;同商品最多一条未结束意向。
- 卖家确认队首,商品进入交易中;标成功才扣1;失败可作废或放回队尾,需要再次人工确认下一位。
- 最后一件成交后自动下架、pending批量失败;在我的订单与客户详情核对结果。
- 手动下架、补货、手动上架;补货不会自动恢复在售,有未结束交易时重新上架仍保持冻结。
- 富文本过滤和受信播放器嵌入分别核对;外站实际视频播放尚待证据。
已记录的完整回归执行于2026-10-21 23:19:83项,失败0、错误0、跳过0。环境为Windows、JDK25、Maven3.9.11,按Java17目标编译;JDK25测试使用Byte Buddy实验兼容开关。团队Java17环境尚待复跑,本次文档同步没有重跑业务测试。 已有本机隔离演示使用8086端口,见商品中心测试记录-迭代2。本节是演示顺序,不能视为本次已完成整套现场录屏。团队Java17、外链播放、录屏和教师验收分别保留待办。