记录从基础实验到复杂系统的每一次代码提交与 Bug 修复
解决了源站带宽过小导致图片加载缓慢的问题,通过 HTTP 头控制 CDN 缓存行为。
WebConfig,为静态资源 (/uploads/**) 添加 Cache-Control: max-age=604800, public 响应头,强制 CDN 缓存 7 天。application.properties 中开启 Tomcat Gzip 压缩,CSS/JS 文件体积减少 70%。解决了生产环境接入 CDN 后,由于 SSL 卸载导致的静态资源加载失败问题。
layout.html 中添加 CSP 策略 upgrade-insecure-requests,强制浏览器升级 HTTP 请求。完成从本地 Windows 开发环境到 Linux 云服务器的完整迁移与部署。
exp8_final_data.sql 至云端数据库,保留了 400+ 模拟用户数据。nohup java -jar 命令配置后台运行,并解决 Linux 环境下文件上传路径权限问题。修复了在之前版本重构中导致管理员操作入口丢失的问题。
datetime-local 格式不兼容导致无法显示旧时间的问题。Invalid bound statement (not found): ...decreaseParticipantCount
原因:在 Java Mapper 接口中添加了方法,但忘记在 XML 文件中同步添加对应的 SQL 标签。已全量同步 Mapper 接口与 XML 文件。
generate_mock_data,生成 400个模拟用户 及 3000条报名记录,模拟真实高并发后的数据状态。@CacheEvict,解决前端人数刷新滞后问题。/api/search/suggest 接口,返回 JSON 数据。ActivityMapper,支持同时匹配标题或 地点 (Location)。java.lang.ArithmeticException: / by zero
原因:部分测试数据的 max_participants 被设为 0,导致前端进度条计算百分比时除以零。
th:style="'width: ' + (${max > 0 ? current * 100 / max : 100}) + '%'"。引入 Redis 后,访问列表页直接 500 报错。
Solution: 重写 RedisConfig,向 ObjectMapper 注册 JavaTimeModule,并开启 default typing。
为了解决“多人抢课”可能导致的超卖问题,对底层架构进行了大改。
update ... where count < max) 实现原子报名。activity-form.html,界面风格从 Bootstrap 原生升级为 玻璃拟态。修复了 Could not resolve type alias 'ActivityRegistration' 错误。原因是从旧项目迁移时包名未修改。强制改为使用全限定类名。
WebConfig 虚拟路径映射,解决重启后上传图片丢失的问题。MainController 中缺失的 File, UUID 等包导入错误。基于实验七的基础 CRUD 代码进行 Spring Boot 3.3 迁移与环境搭建。
"Every bug fixed is a lesson learned."