644da9e65e30a2cb172a2d6f02b60a83f12e3a1e
Companion code for "Dockerizing Spring Boot 4: Layered Jars, Buildpacks, Distroless and Image Size Benchmarks". Fat jar on JDK and JRE, layered jar on Debian, Alpine and distroless, jlink, the JDK 25 AOT cache, Paketo buildpacks and Jib, each measured for size on disk and pushed, rebuild delta, startup, user and shell. Also PID 1 and signal handling, the jdeps module gap, AOT cache mismatches and buildpacks memory calculation. Transcripts in docs/output/, regenerated by scripts/run-all.sh. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01C3TETMrqVUWeFkNtz3Jbo3
spring-boot-demo
Companion code for the Spring Boot articles on ankurm.com.
One directory per article. Each is a self-contained Maven project with its own README.md,
numbered documentation chapters under docs/, and captured real output under docs/output/
that a single script regenerates. Every figure quoted in an article came out of one of those
files.
| Directory | Article | What it demonstrates |
|---|---|---|
actuator-in-production/ |
Spring Boot Actuator in Production | endpoint exposure defaults, securing Actuator, custom health indicators and how they hang |
spring-boot-startup-time/ |
Why Your Spring Boot App Takes 8 Seconds to Start | BufferingApplicationStartup, JFR startup events, self time vs total time, the classpath-scan tax, the JDK 25 AOT cache |
configuration-properties/ |
@ConfigurationProperties vs @Value in Spring Boot 4 | relaxed binding measured three ways, record constructor binding, validation, IDE metadata generation |
profiles-and-config/ |
Spring Boot Profiles Done Right | the precedence stack made visible, config trees and ConfigMaps, why a profile file loses to an environment variable |
spring-aop/ |
Spring AOP Explained | every pointcut designator with real matches, JDK vs CGLIB proxies, six aspects that do not fire |
docker-images/ |
Dockerizing Spring Boot 4: Layered Jars, Buildpacks, Distroless and Image Size Benchmarks | one service packaged nine ways and measured: size on disk and pushed, rebuild delta, startup, PID 1 and signals, jlink, the JDK 25 AOT cache |
Articles whose text is kept here rather than only on the blog have it under
<directory>/post/ — post.md for the body and meta.md for the title, excerpt and
categories.
Running any of them
Each project needs a JDK 25 and Maven 3.9. docker-images also needs Docker; its README lists
the rest:
cd <directory>
export JAVA_HOME=/path/to/jdk-25
mvn -DskipTests package
./scripts/run-all.sh # regenerate every transcript under docs/output/
Licence
MIT — see LICENSE.
Languages
Java
68.7%
Shell
30.8%
Python
0.3%
Dockerfile
0.2%