#!/bin/bash set -e echo "========================================" echo "校园新闻管理系统 - 后端服务启动" echo "========================================" # 如果挂载的配置文件不存在,使用模板 if [ ! -f /app/config/application.yml ]; then echo "[INFO] 未找到application.yml,使用模板配置" cp /app/config/application.yml.template /app/config/application.yml else echo "[INFO] 使用挂载的application.yml配置" fi if [ ! -f /app/config/log4j2-spring.xml ]; then echo "[INFO] 未找到log4j2-spring.xml,使用模板配置" cp /app/config/log4j2-spring.xml.template /app/config/log4j2-spring.xml else echo "[INFO] 使用挂载的log4j2-spring.xml配置" fi # 等待数据库就绪 if [ ! -z "$MYSQL_HOST" ]; then echo "[INFO] 等待MySQL启动 ($MYSQL_HOST:${MYSQL_PORT:-3306})..." RETRY_COUNT=0 MAX_RETRIES=30 while ! nc -z $MYSQL_HOST ${MYSQL_PORT:-3306}; do RETRY_COUNT=$((RETRY_COUNT+1)) if [ $RETRY_COUNT -ge $MAX_RETRIES ]; then echo "[ERROR] MySQL连接超时" exit 1 fi echo "[INFO] 等待MySQL就绪... ($RETRY_COUNT/$MAX_RETRIES)" sleep 2 done echo "[INFO] MySQL已就绪" sleep 3 # 注意:爬虫配置路径已在MySQL容器初始化时配置好 # 详见:docker/Dockerfile.mysql 的 01-init-database.sh fi # 等待Redis就绪 if [ ! -z "$REDIS_HOST" ]; then echo "[INFO] 等待Redis启动 ($REDIS_HOST:${REDIS_PORT:-6379})..." RETRY_COUNT=0 MAX_RETRIES=30 while ! nc -z $REDIS_HOST ${REDIS_PORT:-6379}; do RETRY_COUNT=$((RETRY_COUNT+1)) if [ $RETRY_COUNT -ge $MAX_RETRIES ]; then echo "[ERROR] Redis连接超时" exit 1 fi echo "[INFO] 等待Redis就绪... ($RETRY_COUNT/$MAX_RETRIES)" sleep 2 done echo "[INFO] Redis已就绪" fi # 显示配置信息 echo "========================================" echo "[INFO] 数据库: $MYSQL_HOST:${MYSQL_PORT:-3306}/$MYSQL_DATABASE" echo "[INFO] Redis: $REDIS_HOST:${REDIS_PORT:-6379}" echo "[INFO] 爬虫路径: /app/crawler" echo "[INFO] Python: $(python3 --version)" echo "========================================" # 启动应用 echo "[INFO] 启动Spring Boot应用..." exec java \ -Djava.security.egd=file:/dev/./urandom \ -Dspring.config.location=/app/config/application.yml \ -Dlogging.config=/app/config/log4j2-spring.xml \ -Dfile.encoding=UTF-8 \ ${JAVA_OPTS} \ -jar /app/app.jar