#!/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