Agent-skills-standard spring-boot-deployment
Deploy Spring Boot apps with Docker, GraalVM native images, and graceful shutdown. Use when deploying Spring Boot apps as GraalVM native images, containers, or configuring shutdown. (triggers: Dockerfile, compose.yml, docker-layer, native-image, graceful-shutdown)
install
source · Clone the upstream repo
git clone https://github.com/HoangNguyen0403/agent-skills-standard
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HoangNguyen0403/agent-skills-standard "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/spring-boot/spring-boot-deployment" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-spring-boot-deployment && rm -rf "$T"
manifest:
skills/spring-boot/spring-boot-deployment/SKILL.mdsource content
Spring Boot Deployment Standards
Priority: P0
Containerize with Docker
- Buildpacks: Use
(Gradle) orbootBuildImage
(Maven) for OCI-compliant images.spring-boot:build-image - Layered JAR: Use
support to optimize Build Cache. Use multi-stageLayered JAR
.Dockerfile - Security: Run as
user. Usenon-root
or Distroless as base image.eclipse-temurin - Secrets: NEVER commit secrets to Git. Inject via environment variables, Kubernetes Secrets, or Vault (spring.config.import). Never bake secrets into image layers.
See implementation examples for multi-stage layered Dockerfile and graceful shutdown configuration.
Build GraalVM Native Images (AOT)
- Use Case: Serverless or CLI tools requiring instant startup and low memory footprint.
- Constraints: Use
transformations. Register reflection withAOT
if needed.RuntimeHints - Health Checks: Include
endpoints specifically for Liveness and Readiness probes.Actuator
Tune Resources and Shutdown
- Graceful Shutdown: Enable
with 30s timeout.server.shutdown=graceful - Memory: Use
and-XX:+UseContainerSupport
.-XX:MaxRAMPercentage=75.0 - Log Management: Log to
in Structured JSON for log aggregators.stdout
Anti-Patterns
- No Fat JARs in Docker: Use Layered JAR support for better caching.
- No root container user: Run as restricted user (appuser/nobody).
- No baked-in secrets: Use Env vars or ConfigMaps, never image layers.