kindergarten_java/docs/V10_MIGRATION_FIX.md
En 938503f2b8 chore: 更新启动脚本使用 Java (Spring Boot) 后端
- 修改后端目录从 reading-platform-backend 改为 reading-platform-java
- 修改后端端口从 3000 改为 8080
- 修改启动命令从 npm run start:dev 改为 mvn spring-boot:run
- 添加 JAVA_HOME 自动检测和设置(默认使用 /f/Java/jdk-17)
- 修改日志文件从 reading-platform-backend.log 改为 reading-platform-java.log
- 修改健康检查接口为 /actuator/health
- 增加启动等待超时时间到 60 秒(Java 启动较慢)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 10:35:30 +08:00

2.4 KiB
Raw Blame History

数据库写操作失败修复指南

问题现象

所有写操作INSERT/UPDATE返回 500 错误:

  • 课程创建 API 失败
  • 课程更新 API 失败
  • 租户创建 API 失败

读操作 API 正常工作。

可能原因

  1. Flyway 迁移失败或锁定 - V10 迁移可能失败,导致数据库锁表
  2. 数据库连接为只读模式
  3. 数据库用户权限不足

解决方案

方案一:清理 Flyway 迁移记录(推荐)

在 MySQL 客户端中执行以下命令:

-- 1. 查看当前 Flyway 迁移历史
SELECT * FROM flyway_schema_history ORDER BY installed_rank DESC LIMIT 10;

-- 2. 检查是否有 V10 失败记录
SELECT * FROM flyway_schema_history WHERE version = '10';

-- 3. 如果 V10 状态为 'FAILED',删除该记录
DELETE FROM flyway_schema_history WHERE version = '10' AND success = 0;

-- 4. 验证清理结果
SELECT * FROM flyway_schema_history ORDER BY installed_rank DESC LIMIT 5;

然后重启后端服务Flyway 会自动重新执行迁移。

方案二:检查数据库连接

-- 1. 检查当前数据库是否为只读模式
SELECT @@global.read_only;
-- 应该返回 0可读可写如果返回 1 则是只读模式

-- 2. 检查当前用户权限
SHOW GRANTS FOR CURRENT_USER();
-- 确保有 INSERT, UPDATE, DELETE 权限

-- 3. 检查表是否被锁定
SHOW OPEN TABLES WHERE In_use > 0;

方案三:检查后端日志

查看后端服务日志,寻找 500 错误的详细堆栈信息:

# 如果后端使用日志文件
tail -100 /path/to/application.log

# 或查看控制台输出

验证修复

修复后,执行以下测试:

# 1. 获取 Token
TOKEN=$(curl -s -X POST http://localhost:8080/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"123456","role":"admin"}' | \
  grep -o '"token":"[^"]*"' | cut -d'"' -f4)

# 2. 测试课程创建
curl -s -X POST http://localhost:8080/api/v1/admin/courses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "name":"测试课程",
    "themeId":4,
    "gradeTags":"[\"小班\"]",
    "coreContent":"测试内容",
    "durationMinutes":25
  }'

# 期望返回:{"code":200,"message":"操作成功",...}

前端修复

已修复前端字段名称不匹配问题:

  • durationdurationMinutes

修改文件:reading-platform-frontend/src/views/admin/courses/CourseEditView.vue:320