- 修改所有实体类@TableName注解的表名,添加gxwebsoft_core数据库前缀 - 更新各XML Mapper中的SQL语句表名,统一加上gxwebsoft_core前缀 - 调整关联查询和多个子查询中的表名对应关系,确保与实体类一致 - 涉及实体类包括Company、CompanyComment、Dict、User等多个核心业务表 - 保持代码逻辑和功能不变,确保数据库访问路径更新规范化
3.4 KiB
3.4 KiB
2026-07-18
生产日志报错分析(cms-api)
用户贴了一段 cms-api 容器日志,三类信息,结论如下:
-
Table 'modules.sys_user' doesn't exist(真 bug,影响功能)- 根因:部署的 MySQL 库名是
modules(application-prod.yml/application-cms.yml中jdbc:mysql://.../modules),而common.system.entity.User实体@TableName("sys_user"),且 cms 模块多处使用UserService(CmsNavigationController、CmsArticleController、LeadReferralServiceImpl等)。modules库里缺sys_user系统表 → 任何依赖查sys_user的请求抛SQLSyntaxErrorException→ 500。 - 性质:数据库初始化/迁移遗漏,不是代码逻辑 bug(代码正确,库缺表)。仓库内无
sys_user建表 SQL,说明系统基础表由外部初始化脚本/主 server 工程提供。 - 修复方向:在
modules库执行系统基础 schema(建sys_user等系统表)。需找到对应 init SQL。
- 根因:部署的 MySQL 库名是
-
参数类型转换异常: 参数名=id, 传入值=resolveDomain/getByDomain/submitForm/.../NaN(噪音,不影响)- 来源:
BaseController.handleMethodArgumentTypeMismatch(@ExceptionHandler(MethodArgumentTypeMismatchException)),扫描器/爬虫用方法名字符串(resolveDomain、submitForm 等)和 NaN 探测id(Integer) 参数,被拦截并返回友好错误。属公网 API 被扫描,无功能影响。建议:改用 logger 替代System.err.println,必要时加限流/WAF。
- 来源:
-
定时任务需要查询所有租户的超时订单 list = 0(正常,不影响)- 来源:
OrderCancelServiceImpl.findExpiredUnpaidOrders的System.out.println,表示当前无超时未支付订单。正常运维日志。
- 来源:
修复:sys_ 系统表改指 gxwebsoft_core schema
用户确认架构意图:系统表(sys_ 前缀)本就在中央库 gxwebsoft_core(与 modules 同实例 1Panel-mysql-Bqdt),pwl 模块 Mapper XML 早就在用 gxwebsoft_core.sys_user/gxwebsoft_core.sys_dict_data。原报错是实体 @TableName("sys_xxx") 默认落到数据源默认库 modules 导致表缺失。
已用脚本批量修改(精确、白名单防误伤):
- 33 个实体
@TableName("sys_xxx")→"gxwebsoft_core.sys_xxx"(全部在common/system/entity)。 - 19 个 Mapper XML 里
FROM/JOIN后的sys_表名加gxwebsoft_core.前缀(31 处,全在common/system/mapper/xml)。 - 其他模块(pwl/shop/app)对 sys_ 表的引用本来就是
gxwebsoft_core.开头,未动。 MybatisPlusConfig无全局表前缀,无冲突。
校验:裸 @TableName("sys_=0、裸 FROM/JOIN sys_=0、重复前缀=0。UserInfo/EmailRecord/Payment 等 sys_ 实体也已覆盖。
注意点(已告知用户):
- 需重新编译/重启 cms-api 容器生效。
- 确认
modules库的连接账号对gxwebsoft_core有读写权限,且gxwebsoft_core里确实建齐了这些 sys_ 表。 - 多租户插件会给查询加
tenant_id,表结构/字段不变则行为不变。
生成 gxwebsoft_core 缺失系统表检查 SQL
从实体 @TableName 精确提取共 31 张 sys_ 表,生成 docs/check_gxwebsoft_core_sys_tables.sql。
含四种查法:① 只列缺失表(结果空=齐全)② 逐张 EXISTS/MISSING 状态 ③ 期望31/实际/缺失数量统计 ④ 确认 gxwebsoft_core 库存在+账号有权限。基于 information_schema.tables 比对,无副作用只读。