#!/bin/sh
#cp /etc/hosts /etc/hosts.temp

# 初始化环境变量（设置默认值，避免空变量）
APP_NAME=${APP_NAME:-"default-springboot-app"}  # 默认服务名
SKYWALKING_SERVER=${SKYWALKING_SERVER:-"localhost:11800"}  # 默认SkyWalking服务地址
ENV_APP_PRO_FILE=${ENV_APP_PRO_FILE:-"test"}  # 默认环境为test

# 初始化Java启动参数（包含是否使用-server模式）
java_base="java -javaagent:/opt/agent/skywalking-agent.jar -Dskywalking.agent.service_name=$APP_NAME"
export java_base="$java_base -Dskywalking.collector.backend_service=$SKYWALKING_SERVER"

java_start="$java_base -jar"

# 根据环境变量区分开发/生产环境配置
if [ "$ENV_APP_PRO_FILE" = "prod" ]; then
    # 生产环境JVM参数
    export JAVA_OPTS="-Xms1024m -Xmx4096m -Xmn512m -Xss512k -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
    export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:G1HeapRegionSize=32m -XX:G1ReservePercent=20"
    export JAVA_OPTS="$JAVA_OPTS -XX:MaxGCPauseMillis=500 -XX:G1MixedGCCountTarget=10"
    
    export JAVA_OPTS="$JAVA_OPTS -verbose:gc -Xloggc:/var/log/app/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps"
    export JAVA_OPTS="$JAVA_OPTS -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"
	    
	# 生产环境使用-server模式
	java_start="$java_base -jar -server"
else
    # 开发环境JVM参数
    export JAVA_OPTS="-Xms512m -Xmx2048m -Xmn256m -Xss512k -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
    export JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+UseParNewGC"
    export JAVA_OPTS="$JAVA_OPTS -XX:+CMSParallelRemarkEnabled -XX:+CMSClassUnloadingEnabled -XX:CMSMaxAbortablePrecleanTime=5000"
    export JAVA_OPTS="$JAVA_OPTS -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly"
    export JAVA_OPTS="$JAVA_OPTS -verbose:gc -Xloggc:./logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps"
    # 开发环境开启远程调试
    export JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
fi

# 公共配置（编码、时区等）
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8"
export JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"
export JAVA_OPTS="$JAVA_OPTS -Duser.language=zh -Duser.country=CN -Duser.timezone=Asia/Shanghai"

# SpringBoot 环境配置
export JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=$ENV_APP_PRO_FILE"

# 输出启动参数
echo "启动参数：$java_start $JAVA_OPTS $ENV_APP_FILE_PATH"

# 执行启动命令（用双引号包裹每个变量）
exec $java_start $JAVA_OPTS $ENV_APP_FILE_PATH