Files
cattleData/backend/TROUBLESHOOTING_500_ERROR.md

131 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 500 错误排查指南
## 问题描述
导入省份数据时出现 500 Internal Server Error
## 可能的原因和解决方案
### 1. 数据库表未创建
**检查步骤:**
```sql
-- 连接到数据库
USE cattleTends;
-- 检查表是否存在
SHOW TABLES LIKE 'cattleprovince';
SHOW TABLES LIKE 'cattlenational';
```
**如果表不存在,执行以下 SQL**
#### 创建 cattleprovince 表
```sql
CREATE TABLE IF NOT EXISTS cattleprovince (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
province VARCHAR(255) NOT NULL UNIQUE COMMENT '省份名称',
province_price DECIMAL(10, 2) COMMENT '省份均价',
inventory_23th INT COMMENT '23年存栏万头',
slaughter_23th INT COMMENT '23年出栏万头',
inventory_24th INT COMMENT '24年存栏万头',
slaughter_24th INT COMMENT '24年出栏万头',
inventory_25th INT COMMENT '25年存栏万头',
slaughter_25th INT COMMENT '25年出栏万头',
create_time DATETIME COMMENT '创建时间',
up_time DATETIME NOT NULL COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='省份数据表';
-- 添加索引
CREATE INDEX idx_province_name ON cattleprovince(province);
CREATE INDEX idx_province_price ON cattleprovince(province_price);
CREATE INDEX idx_inv_23 ON cattleprovince(inventory_23th);
CREATE INDEX idx_sla_23 ON cattleprovince(slaughter_23th);
CREATE INDEX idx_inv_24 ON cattleprovince(inventory_24th);
CREATE INDEX idx_sla_24 ON cattleprovince(slaughter_24th);
CREATE INDEX idx_inv_25 ON cattleprovince(inventory_25th);
CREATE INDEX idx_sla_25 ON cattleprovince(slaughter_25th);
```
#### 创建 cattlenational 表
```sql
CREATE TABLE IF NOT EXISTS cattlenational (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
national_inventory_23th INT COMMENT '23年全国存栏量15个省份存栏量的总和',
national_slaughter_23th INT COMMENT '23年全国出栏量15个省份出栏量的总和',
national_inventory_24th INT COMMENT '24年全国存栏量15个省份存栏量的总和',
national_slaughter_24th INT COMMENT '24年全国出栏量15个省份出栏量的总和',
national_inventory_25th INT COMMENT '25年全国存栏量15个省份存栏量的总和',
national_slaughter_25th INT COMMENT '25年全国出栏量15个省份出栏量的总和',
create_time DATETIME COMMENT '创建时间',
up_time DATETIME NOT NULL COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='全国总量数据表';
-- 添加索引
CREATE INDEX idx_national_inv_23 ON cattlenational(national_inventory_23th);
CREATE INDEX idx_national_sla_23 ON cattlenational(national_slaughter_23th);
CREATE INDEX idx_national_inv_24 ON cattlenational(national_inventory_24th);
CREATE INDEX idx_national_sla_24 ON cattlenational(national_slaughter_24th);
CREATE INDEX idx_national_inv_25 ON cattlenational(national_inventory_25th);
CREATE INDEX idx_national_sla_25 ON cattlenational(national_slaughter_25th);
```
### 2. 查看后端日志
**检查后端日志文件:**
```bash
# 如果使用 start.sh 启动
tail -f log.out
# 或者查看 Spring Boot 控制台输出
```
**常见错误信息:**
- `Table 'cattleTends.cattleprovince' doesn't exist` - 表不存在
- `Table 'cattleTends.cattlenational' doesn't exist` - 表不存在
- `Could not resolve placeholder` - 配置问题
- `No bean found` - 依赖注入问题
### 3. 检查后端服务是否正常运行
```bash
# 检查服务是否运行
ps aux | grep java | grep cattletends
# 检查端口是否监听
netstat -tlnp | grep 12240
```
### 4. 重新编译和重启
```bash
cd backend
mvn clean package
./start.sh restart
```
### 5. 测试接口
```bash
# 测试获取省份数据接口
curl http://localhost:12240/api/cattle-data/provinces
# 测试获取全国总量接口
curl http://localhost:12240/api/cattle-data/national
```
## 快速修复步骤
1. **确保数据库表已创建**(执行上面的 SQL
2. **重新编译后端**`cd backend && mvn clean package`
3. **重启服务**`./start.sh restart`
4. **查看日志**`tail -f log.out`
5. **重新尝试导入**
## 如果问题仍然存在
请提供以下信息:
1. 后端日志的完整错误信息
2. 数据库表是否已创建(执行 `SHOW TABLES;`
3. Excel 文件的格式(列数、数据类型)