206 lines
5.5 KiB
Bash
206 lines
5.5 KiB
Bash
#!/bin/bash
|
||
|
||
# ===========================================
|
||
# 农业股票数据分析系统启动脚本
|
||
# ===========================================
|
||
|
||
echo "🌾 农业股票数据分析系统启动中..."
|
||
echo "=========================================="
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# 检查必要的软件
|
||
check_requirements() {
|
||
echo -e "${BLUE}📋 检查系统环境...${NC}"
|
||
|
||
# 检查Java
|
||
if ! command -v java &> /dev/null; then
|
||
echo -e "${RED}❌ 未安装Java,请先安装JDK 8+${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 检查Maven
|
||
if ! command -v mvn &> /dev/null; then
|
||
echo -e "${RED}❌ 未安装Maven,请先安装Maven${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 检查Node.js
|
||
if ! command -v node &> /dev/null; then
|
||
echo -e "${RED}❌ 未安装Node.js,请先安装Node.js 16+${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 检查MySQL
|
||
if ! command -v mysql &> /dev/null; then
|
||
echo -e "${RED}❌ 未安装MySQL,请先安装MySQL 8.0+${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
echo -e "${GREEN}✅ 系统环境检查通过${NC}"
|
||
}
|
||
|
||
# 初始化数据库
|
||
init_database() {
|
||
echo -e "${BLUE}🗄️ 初始化数据库...${NC}"
|
||
|
||
# 检查数据库连接
|
||
mysql -u root -p -e "SELECT 1;" &> /dev/null
|
||
if [ $? -ne 0 ]; then
|
||
echo -e "${RED}❌ 无法连接到MySQL数据库${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 创建数据库和表结构
|
||
echo -e "${YELLOW}📝 创建数据库表结构...${NC}"
|
||
mysql -u root -p agricultural_stock < spark-processor/database_tables.sql
|
||
|
||
echo -e "${GREEN}✅ 数据库初始化完成${NC}"
|
||
}
|
||
|
||
# 启动Spark数据处理器
|
||
start_spark_processor() {
|
||
echo -e "${BLUE}⚡ 启动Spark数据处理器...${NC}"
|
||
|
||
cd spark-processor
|
||
|
||
# 编译项目
|
||
echo -e "${YELLOW}🔨 编译Spark项目...${NC}"
|
||
mvn clean compile > /dev/null 2>&1
|
||
if [ $? -ne 0 ]; then
|
||
echo -e "${RED}❌ Spark项目编译失败${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 运行数据处理
|
||
echo -e "${YELLOW}📊 执行数据分析...${NC}"
|
||
mvn exec:java -Dexec.mainClass="com.agricultural.spark.StockDataProcessor" > ../logs/spark.log 2>&1 &
|
||
SPARK_PID=$!
|
||
|
||
cd ..
|
||
echo -e "${GREEN}✅ Spark数据处理器已启动 (PID: $SPARK_PID)${NC}"
|
||
}
|
||
|
||
# 启动后端服务
|
||
start_backend() {
|
||
echo -e "${BLUE}🚀 启动后端服务...${NC}"
|
||
|
||
cd backend
|
||
|
||
# 编译项目
|
||
echo -e "${YELLOW}🔨 编译后端项目...${NC}"
|
||
mvn clean compile > /dev/null 2>&1
|
||
if [ $? -ne 0 ]; then
|
||
echo -e "${RED}❌ 后端项目编译失败${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 启动Spring Boot应用
|
||
echo -e "${YELLOW}🌐 启动Spring Boot应用...${NC}"
|
||
mvn spring-boot:run > ../logs/backend.log 2>&1 &
|
||
BACKEND_PID=$!
|
||
|
||
cd ..
|
||
echo -e "${GREEN}✅ 后端服务已启动 (PID: $BACKEND_PID)${NC}"
|
||
echo -e "${GREEN} API地址: http://localhost:8080${NC}"
|
||
}
|
||
|
||
# 启动前端服务
|
||
start_frontend() {
|
||
echo -e "${BLUE}🎨 启动前端服务...${NC}"
|
||
|
||
cd frontend
|
||
|
||
# 安装依赖
|
||
if [ ! -d "node_modules" ]; then
|
||
echo -e "${YELLOW}📦 安装前端依赖...${NC}"
|
||
npm install > /dev/null 2>&1
|
||
if [ $? -ne 0 ]; then
|
||
echo -e "${RED}❌ 前端依赖安装失败${NC}"
|
||
exit 1
|
||
fi
|
||
fi
|
||
|
||
# 启动开发服务器
|
||
echo -e "${YELLOW}🌐 启动Vue开发服务器...${NC}"
|
||
npm run dev > ../logs/frontend.log 2>&1 &
|
||
FRONTEND_PID=$!
|
||
|
||
cd ..
|
||
echo -e "${GREEN}✅ 前端服务已启动 (PID: $FRONTEND_PID)${NC}"
|
||
echo -e "${GREEN} 访问地址: http://localhost:3000${NC}"
|
||
}
|
||
|
||
# 创建日志目录
|
||
create_log_dir() {
|
||
if [ ! -d "logs" ]; then
|
||
mkdir -p logs
|
||
fi
|
||
}
|
||
|
||
# 保存进程ID
|
||
save_pids() {
|
||
echo "$SPARK_PID" > logs/spark.pid
|
||
echo "$BACKEND_PID" > logs/backend.pid
|
||
echo "$FRONTEND_PID" > logs/frontend.pid
|
||
echo -e "${BLUE}📝 进程ID已保存到logs目录${NC}"
|
||
}
|
||
|
||
# 显示系统状态
|
||
show_status() {
|
||
echo ""
|
||
echo -e "${GREEN}🎉 农业股票数据分析系统启动完成!${NC}"
|
||
echo "=========================================="
|
||
echo -e "${BLUE}📊 Spark数据处理器:${NC} PID $SPARK_PID"
|
||
echo -e "${BLUE}🚀 后端API服务:${NC} http://localhost:8080"
|
||
echo -e "${BLUE}🎨 前端Web界面:${NC} http://localhost:3000"
|
||
echo ""
|
||
echo -e "${YELLOW}📋 系统功能:${NC}"
|
||
echo " • 实时股票数据分析"
|
||
echo " • 技术指标计算"
|
||
echo " • 市场趋势预测"
|
||
echo " • 数据可视化展示"
|
||
echo ""
|
||
echo -e "${YELLOW}📝 查看日志:${NC}"
|
||
echo " • Spark日志: tail -f logs/spark.log"
|
||
echo " • 后端日志: tail -f logs/backend.log"
|
||
echo " • 前端日志: tail -f logs/frontend.log"
|
||
echo ""
|
||
echo -e "${YELLOW}🛑 停止系统:${NC}"
|
||
echo " • 运行: ./stop-system.sh"
|
||
echo "=========================================="
|
||
}
|
||
|
||
# 主函数
|
||
main() {
|
||
check_requirements
|
||
create_log_dir
|
||
init_database
|
||
|
||
# 等待用户确认
|
||
echo -e "${YELLOW}准备启动系统,按Enter继续...${NC}"
|
||
read
|
||
|
||
start_spark_processor
|
||
sleep 5 # 等待Spark处理完成
|
||
|
||
start_backend
|
||
sleep 10 # 等待后端启动
|
||
|
||
start_frontend
|
||
sleep 5 # 等待前端启动
|
||
|
||
save_pids
|
||
show_status
|
||
}
|
||
|
||
# 错误处理
|
||
trap 'echo -e "${RED}❌ 启动过程中发生错误,正在清理...${NC}"; kill $SPARK_PID $BACKEND_PID $FRONTEND_PID 2>/dev/null; exit 1' ERR
|
||
|
||
# 执行主函数
|
||
main |