TrafficAudit 交通货运统计审核系统 —— 部署包({stamp}) ======================================================== 【目录结构】 backend/ traffic-audit-server-1.0.0-SNAPSHOT.jar 后端程序(含全部依赖,**已内嵌前端**) docs/ 报表模板与运行数据目录(必需,勿删) application.yml 外部配置(改这里即可,无需重新打包) start-backend.cmd / start-backend.sh 前台启动脚本(人工调试用,关了窗口就停) trafficAudit.exe WinSW 服务包装器(把 java 变成 Windows 服务,勿删勿改名) trafficAudit.xml WinSW 服务配置(服务名/启动方式/日志/失败重启策略) install-service.ps1 注册/查看/重启/删除 Windows 服务(开机自启,推荐) start-backend-service.cmd 非交互启动器(无 pause、写 app.log,配合计划任务用) install-autostart.ps1 备选:注册“计划任务”方式的开机自启 frontend/ dist/ 前端构建产物(备用:想用 nginx 托管时用) nginx.conf.example nginx 配置示例 db/ init.sql 建库建表 + 预置账号(必须执行) sql_city_bus.sql 城市客运-公交月度表(必须执行) sql_city_taxi.sql 城市客运-出租月度表/出租授权表(必须执行) sql_wyc.sql 网约车全省总量表/订单分市州表(必须执行) sql_holiday.sql 专项统计-重要节假日表(旧库缺表时执行) sql_holiday_decimal_migration.sql 节假日数值列精度迁移(旧库升级) sql_holiday_comparison_base_migration.sql 节假日环比基期字段迁移(旧库升级) README-部署说明.txt 【部署机环境要求】 JDK 8(必需) MySQL 5.7 / 8.0(必需) **不需要 Redis**(代码未使用;旧版说明里的 Redis 是遗留配置,可忽略) **不需要 nginx**(前端已内嵌进 jar,访问 8090 即可;nginx 仅为备选方案) 【操作系统兼容性】 开机自启用的是 Windows 服务,而“自动启动 / 延迟启动 / 失败自动重启”是系统自带能力, 从 Win7 SP1 到 Win11、Server 2008 R2 到 Server 2022/2025 机制完全一样。差别只在服务包装器 trafficAudit.exe 依赖什么运行时: - 本包内的 trafficAudit.exe 是 WinSW 2.12.0 的 x64 自包含构建(自带 .NET 6 运行时,已校验 SHA-256), **不需要另外安装 .NET Framework**;推荐用于 64 位 Win10 / Win11 / Server 2016 及以上。 - Win7 SP1 / Server 2008 R2 / Server 2012(R2):自包含版通常也能跑(Win7 SP1 需先打 KB2533623); 若报缺少 api-ms-win-*.dll 之类,换成官方 thin 构建:把 WinSW.NET461.exe 下载后改名成 trafficAudit.exe 覆盖(配置 trafficAudit.xml 不用改),它需 .NET Framework 4.6.1+: https://github.com/winsw/winsw/releases/download/v2.12.0/WinSW.NET461.exe - 32 位系统:把包装器换成 WinSW-x86.exe(同一下载页)。 - Win7 / Server 2012 本身已过微软支持期,新服务器建议直接上 Server 2016 及以上。 - 脚本要求:install-service.ps1 在 Windows PowerShell 2.0+ 下可用(Win7 自带 2.0,已做兼容); 3.2 的计划任务脚本用到了 New-ScheduledTask* 命令,需要 Win8 / Server 2012 及以上。 【部署步骤】 1. 初始化数据库(4 个脚本都要执行,顺序如下) mysql --default-character-set=utf8mb4 -u root -p < db/init.sql mysql --default-character-set=utf8mb4 -u root -p traffic_audit < db/sql_city_bus.sql mysql --default-character-set=utf8mb4 -u root -p traffic_audit < db/sql_city_taxi.sql mysql --default-character-set=utf8mb4 -u root -p traffic_audit < db/sql_wyc.sql 注:全新库的 init.sql 已含节假日 4 张表;若是在早期版本库上补节假日模块,再执行 db/sql_holiday.sql,并按需执行两个迁移脚本。 预置账号:admin / admin123(首次登录后请改密码) 2. 改配置 backend/application.yml - spring.datasource.url / username / password :改成部署机的 MySQL(默认端口 3306) - jwt.secret :改成一串随机字符串(**必须是 Base64 合法字符且长度是 4 的倍数**,如 32 位十六进制;填中文会登录失败) - deepseek.api-key :需要 AI 分析时填,不需要可留空 注:application.yml 与 jar 同级即生效,不用重新打包。 3. 启动后端(在 backend 目录下) Windows:双击 start-backend.cmd Linux: sh start-backend.sh 成功标志:出现 "Started TrafficAuditApplication" 与 "Tomcat started on port(s): 8090" 3.1 Windows 开机自启(推荐:注册成 Windows 服务,一次配置长期生效) 前提:backend 目录下的 trafficAudit.exe / trafficAudit.xml / install-service.ps1 都已随本部署包提供, 不需要另外下载 WinSW,也不需要给 java 装别的东西。 在 backend 目录下,用【管理员】PowerShell 执行: powershell -NoProfile -ExecutionPolicy Bypass -File install-service.ps1 效果:注册 Windows 服务 TrafficAuditBackend,开机自动启动(延迟启动,先等 MySQL 就绪), 不需要任何用户登录;java 进程异常退出由服务管理器自动重启(10 秒 / 30 秒 / 60 秒递增重试, 1 小时后重试计数清零)。服务以 LocalSystem 身份运行。 脚本会自动定位 java.exe(JAVA_HOME → PATH → JavaSoft 注册表 → Program Files), 并把绝对路径写进 trafficAudit.xml(SYSTEM 服务的 PATH 与登录用户不同,写绝对路径更稳)。 常用参数: -Status 查看服务状态(不需要管理员) -Restart 重启服务 -Remove 停止并删除服务 -NoStart 只注册不启动 -JavaPath "D:\jdk8\bin\java.exe" 手动指定 JDK 日志:backend\logs\trafficAudit.out.log(运行输出)与 trafficAudit.err.log(错误输出), 单个文件 10MB,保留 10 个滚动文件。 验证:浏览器打开 http://<部署机IP>:8090 ,或 (Invoke-WebRequest http://127.0.0.1:8090 -UseBasicParsing).StatusCode 注意: - 开机自启靠服务的“自动”启动类型;如果把它改成“手动”,就不会再随机器启动。 - 重复执行 install-service.ps1 是安全的:会先停服务再重新注册并启动。 - 同一台机不要同时启用下面的计划任务方式,两个进程会抢 8090 端口。 - 建议把部署包放在 D:\trafficAudit 这类简单路径;放在某些用户目录下时 LocalSystem 可能没有写权限,日志会报权限错误。 3.2 备选:计划任务方式(不想把后端装成服务时用,与 3.1 二选一) 在 backend 目录下,用【管理员】PowerShell 执行: powershell -NoProfile -ExecutionPolicy Bypass -File install-autostart.ps1 效果:注册计划任务 TrafficAuditBackend,开机延迟 60 秒后以 SYSTEM 身份运行 start-backend-service.cmd, 不需要用户登录,失败自动重试 3 次,运行日志写在 backend\app.log。 常用参数:-DelaySeconds 90(改延迟秒数) -StartNow(注册后立即启动一次) -Status(查看状态) -Remove(删除开机自启) 注:启动器优先用 JAVA_HOME\bin\java.exe,找不到时回退 PATH;检测到 8090 已在监听则直接退出。 4. 访问系统 浏览器打开 http://<部署机IP>:8090 (前端已内嵌,页面与接口同源) 账号:admin / admin123 【数据迁移(可选)】 想把本机数据一并搬到新机器,用 mysqldump(本机 MySQL 若不在 3306,按实际端口改): mysqldump -h 127.0.0.1 -P 3306 -u root -p --databases traffic_audit > traffic_audit_full.sql 再在新机器执行: mysql -u root -p < traffic_audit_full.sql 注意:全量 dump 会带上本机的账号密码,覆盖 init.sql 预置的 admin 账号。 【常见问题】 0. 启动报 java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO): “using password: NO” = 后端拿到的数据库密码是空串(不是密码错)。 检查 backend/application.yml 是否与 jar 同级且 spring.datasource.password 已填真实密码; 若未改 application.yml,也可用环境变量 TRAFFIC_DB_PASSWORD 代替。改完重启即可,无需重新打包。 1. 启动报「未找到数据目录 docs」/ 导出报「未找到模板文件」: 必须在 backend 目录下启动(jar 与 docs 同级),不要只拷 jar。 2. 报表导出报「未找到汇总表母版《YYYY年M月道路运输量汇总表.xlsx》」: docs/生成汇总大表 下缺少该月份母版;把源机器的该文件拷过去。 3. 8090 端口被占用:改 application.yml 的 server.port 后重启。 4. 页面打开是空白:确认访问的是 http://:8090 根路径,且浏览器强制刷新(Ctrl+F5)。 5. 上传大文件失败:后端限制 100MB,已配置;如前面还挂了 nginx,需同步放大 client_max_body_size。 6. 服务已注册但 8090 打不开:看 backend\logs\trafficAudit.err.log 的报错内容; 服务方式下用的是 backend\application.yml,password 必须是真实 MySQL 密码(占位文字会导致 using password: NO)。 7. 服务报“拒绝访问”或写不了日志:部署目录权限不足。 把部署包放到 D:\trafficAudit 这类简单路径,或给 LocalSystem 授予该目录的读写权限。 8. 想临时取消开机自启但保留服务:Set-Service TrafficAuditBackend -StartupType Manual 【停止服务】 服务方式: Stop-Service TrafficAuditBackend (重新启动:Start-Service TrafficAuditBackend) 彻底删除开机自启:install-service.ps1 -Remove 前台启动: 关闭 start-backend.cmd 窗口 计划任务: Stop-ScheduledTask -TaskName TrafficAuditBackend Linux: Ctrl+C,或 kill 对应 java 进程(ps -ef | grep java)