# 运行阶段：直接使用你本地已打好的 jar（放在本目录，与 Dockerfile / docker-compose.yml 同级）
# 用法：先本地执行 mvn package（JDK 21），把 target/devToolBox-1.0-SNAPSHOT.jar 复制到本目录
FROM eclipse-temurin:21-jre
WORKDIR /app
ENV TZ=Asia/Shanghai

# JVM 默认参数（4H4G + 已跑 Redis/Gitea/Ollama 的低配场景）：
#   -Xms256m / -Xmx512m    堆固定，避免 JVM 猜着吃；不够再上调
#   ExitOnOutOfMemoryError OOM 时直接退出，交给 Docker 重启，比卡死强
#   HeapDumpOnOutOfMemoryError 出事时留一份堆快照便于排查
# 想运行时调整：compose 里覆盖环境变量 JAVA_OPTS 即可
ENV JAVA_OPTS="-Xms256m -Xmx512m -XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof"

# 本目录下放且仅放一个 jar（.dockerignore 已排除 target/，避免误打包）
COPY *.jar app.jar
EXPOSE 8077

# sh -c "exec ..." 方式：先解析 $JAVA_OPTS，再用 exec 把 java 替换 sh 作为 PID 1，
# 这样 docker stop 发的 SIGTERM 能被 JVM 正常接收、Spring Boot 走完 shutdown hook
ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/app.jar"]
