黑马点评笔记千年后的大总结
2026/6/3 3:51:02 网站建设 项目流程

随便唠几句

之前做了黑马点评做了一些记录,秉承着伟大开源精神,最近会陆续整理出来,针对一些问题给出修复方案。由于这个项目确实比较老了,之前还是的确碰到了不少问题。

第一部分总结

问题一:lombok与jdk版本不兼容

问题描述:由于本人使用的是jdk21,jdk21中删除了JCImport.qualid字段,springboot 2.3.12管理的lombok版本太旧,不支持,仍然通过反射访问该字段。

解决方案:在pom.xml中显式指定lombok版本为1.18.30+

<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <optional>true</optional> </dependency>

问题二:Mysql 8连接认证失败

问题描述:mysql 8 默认使用caching_sha2_password 认证插件,需通过公钥检索完成认证,但是旧版MySQL驱动5.1.47默认禁止公钥检索

解决方案:在jdbc url中添加allowPublicKeyRetrieval=true参数

spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/hmdp?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true username: root password: 你的密码

问题三:MySQL 8严格模式下timestamp默认值不合法

问题描述: MySQL 8默认开启严格模式(NO_ZERO_DATE) ,黑马点评中的’0000-00-00 00:00:00’是不合法的timestamp默认值,但是tb_seckill_voucher表中的begin_time和end_time两个字段却使用了这个默认值

解决方案:将默认值从’0000-00-00 00:00:00’修改为CURRENT_TIMESTAMP.

修改前sql文件

CREATE TABLE `tb_seckill_voucher` ( `voucher_id` bigint(20) UNSIGNED NOT NULL COMMENT '关联的优惠券的id', `stock` int(8) NOT NULL COMMENT '库存', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `begin_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '生效时间', `end_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '失效时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `begin_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '生效时间', `end_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '失效时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`voucher_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '秒杀优惠券表,与优惠券是一对一关系' ROW_FORMAT = Compact;

修改后sql文件

CREATE TABLE `tb_seckill_voucher` ( `voucher_id` bigint(20) UNSIGNED NOT NULL COMMENT '关联的优惠券的id', `stock` int(8) NOT NULL COMMENT '库存', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `begin_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '生效时间', `end_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '失效时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`voucher_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '秒杀优惠券表,与优惠券是一对一关系' ROW_FORMAT = Compact;

解决了这部分的内容,你的项目大概率就可以跑起来并且拿到数据了,接下来就去引入前端的代码即可。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询