智慧水务管理系统 - 精河县供水工程综合管理平台

run_etl.sh 6.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. #!/bin/bash
  2. # ETL数据管道启动脚本
  3. # 支持开发和生产环境
  4. set -e
  5. # 环境配置
  6. APP_NAME="etl-pipeline"
  7. SPRING_PROFILES_ACTIVE="dev"
  8. MEMORY_OPTS="-Xmx1g -Xms512m"
  9. # 颜色输出
  10. RED='\033[0;31m'
  11. GREEN='\033[0;32m'
  12. YELLOW='\033[1;33m'
  13. NC='\033[0m' # No Color
  14. # 日志函数
  15. log_info() {
  16. echo -e "${GREEN}[INFO]${NC} $1"
  17. }
  18. log_warn() {
  19. echo -e "${YELLOW}[WARN]${NC} $1"
  20. }
  21. log_error() {
  22. echo -e "${RED}[ERROR]${NC} $1"
  23. }
  24. # 检查Java环境
  25. check_java() {
  26. if ! command -v java &> /dev/null; then
  27. log_error "Java not found. Please install Java 11 or higher."
  28. exit 1
  29. fi
  30. JAVA_VERSION=$(java -version 2>&1 | head -n1 | cut -d'"' -f2 | cut -d'.' -f1)
  31. if [ "$JAVA_VERSION" -lt 11 ]; then
  32. log_error "Java version 11 or higher required. Current: $JAVA_VERSION"
  33. exit 1
  34. fi
  35. log_info "Java version: $(java -version 2>&1 | head -n1)"
  36. }
  37. # 检查数据库连接
  38. check_database() {
  39. log_info "Checking database connection..."
  40. # 检查MySQL连接
  41. if ! mysql -h localhost -u root -pwater123 -e "SELECT 1;" &> /dev/null; then
  42. log_warn "MySQL connection failed. Please check MySQL service and configuration."
  43. log_warn "Attempting to start Docker Compose services..."
  44. # 启动Docker服务
  45. if [ -f "docker-compose.yml" ]; then
  46. docker-compose up -d
  47. sleep 10
  48. # 等待MySQL启动
  49. log_info "Waiting for MySQL to start..."
  50. for i in {1..30}; do
  51. if mysql -h localhost -u root -pwater123 -e "SELECT 1;" &> /dev/null; then
  52. log_info "MySQL connection established."
  53. return 0
  54. fi
  55. sleep 2
  56. done
  57. log_error "MySQL failed to start within expected time."
  58. exit 1
  59. else
  60. log_error "docker-compose.yml not found. Please create Docker Compose configuration."
  61. exit 1
  62. fi
  63. fi
  64. log_info "Database connection OK."
  65. }
  66. # 检查Kafka连接
  67. check_kafka() {
  68. log_info "Checking Kafka connection..."
  69. # 检查Kafka是否运行在Docker中
  70. if docker-compose ps kafka 2>/dev/null | grep -q "Up"; then
  71. log_info "Kafka is running in Docker."
  72. return 0
  73. fi
  74. log_warn "Kafka connection check skipped - Docker Compose not available."
  75. }
  76. # 创建日志目录
  77. create_logs_dir() {
  78. if [ ! -d "logs" ]; then
  79. mkdir -p logs
  80. log_info "Created logs directory."
  81. fi
  82. }
  83. # 编译项目
  84. build_project() {
  85. log_info "Building project..."
  86. if [ -f "pom.xml" ]; then
  87. mvn clean package -DskipTests
  88. if [ $? -ne 0 ]; then
  89. log_error "Maven build failed."
  90. exit 1
  91. fi
  92. JAR_FILE="target/etl-pipeline-1.0.0-SNAPSHOT.jar"
  93. elif [ -f "build.gradle" ]; then
  94. ./gradlew build
  95. if [ $? -ne 0 ]; then
  96. log_error "Gradle build failed."
  97. exit 1
  98. fi
  99. JAR_FILE="build/libs/etl-pipeline-1.0.0-SNAPSHOT.jar"
  100. else
  101. log_error "No build system found (pom.xml or build.gradle)."
  102. exit 1
  103. fi
  104. log_info "Build completed successfully."
  105. }
  106. # 启动应用
  107. start_application() {
  108. log_info "Starting $APP_NAME..."
  109. if [ -f "$JAR_FILE" ]; then
  110. java $MEMORY_OPTS -jar $JAR_FILE --spring.profiles.active=$SPRING_PROFILES_ACTIVE &
  111. APP_PID=$!
  112. echo $APP_PID > .app.pid
  113. log_info "$APP_NAME started with PID: $APP_PID"
  114. log_info "Access: http://localhost:8080"
  115. log_info "Logs: ./logs/etl-application.log"
  116. else
  117. log_error "Application JAR not found: $JAR_FILE"
  118. exit 1
  119. fi
  120. }
  121. # 停止应用
  122. stop_application() {
  123. if [ -f ".app.pid" ]; then
  124. APP_PID=$(cat .app.pid)
  125. if kill -0 $APP_PID 2>/dev/null; then
  126. log_info "Stopping $APP_NAME (PID: $APP_PID)..."
  127. kill $APP_PID
  128. rm .app.pid
  129. log_info "$APP_NAME stopped."
  130. else
  131. log_warn "$APP_NAME is not running."
  132. fi
  133. else
  134. log_warn "$APP_PID file not found."
  135. fi
  136. }
  137. # 查看应用状态
  138. status_application() {
  139. if [ -f ".app.pid" ]; then
  140. APP_PID=$(cat .app.pid)
  141. if kill -0 $APP_PID 2>/dev/null; then
  142. log_info "$APP_NAME is running with PID: $APP_PID"
  143. curl -s http://localhost:8080/actuator/health | jq '.' 2>/dev/null || log_info "Health check endpoint not available."
  144. else
  145. log_info "$APP_NAME is not running."
  146. fi
  147. else
  148. log_info "$APP_PID file not found."
  149. fi
  150. }
  151. # 查看日志
  152. show_logs() {
  153. if [ -f "logs/etl-application.log" ]; then
  154. if [ "$1" == "follow" ]; then
  155. tail -f logs/etl-application.log
  156. else
  157. log_info "Recent application logs:"
  158. tail -n 100 logs/etl-application.log
  159. fi
  160. else
  161. log_warn "Log file not found: logs/etl-application.log"
  162. fi
  163. }
  164. # 主函数
  165. main() {
  166. case "${1:-start}" in
  167. start)
  168. check_java
  169. create_logs_dir
  170. check_database
  171. check_kafka
  172. build_project
  173. start_application
  174. ;;
  175. stop)
  176. stop_application
  177. ;;
  178. restart)
  179. stop_application
  180. sleep 2
  181. main start
  182. ;;
  183. status)
  184. status_application
  185. ;;
  186. logs)
  187. show_logs
  188. ;;
  189. logs-follow)
  190. show_logs follow
  191. ;;
  192. build)
  193. check_java
  194. build_project
  195. ;;
  196. db-check)
  197. check_database
  198. ;;
  199. kafka-check)
  200. check_kafka
  201. ;;
  202. *)
  203. echo "Usage: $0 {start|stop|restart|status|logs|logs-follow|build|db-check|kafka-check}"
  204. echo " start - Build and start the application"
  205. echo " stop - Stop the application"
  206. echo " restart - Restart the application"
  207. echo " status - Check application status"
  208. echo " logs - Show recent logs"
  209. echo " logs-follow - Follow log output"
  210. echo " build - Build the project only"
  211. echo " db-check - Check database connection"
  212. echo " kafka-check - Check Kafka connection"
  213. exit 1
  214. ;;
  215. esac
  216. }
  217. # 执行主函数
  218. main "$@"