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
38 lines
2.5 KiB
Markdown
38 lines
2.5 KiB
Markdown
# spring-boot-demo
|
|
|
|
Companion code for the Spring Boot articles on **[ankurm.com](https://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/`](actuator-in-production) | [Spring Boot Actuator in Production](https://ankurm.com/spring-boot-actuator-production-endpoints-security-health-indicators/) | endpoint exposure defaults, securing Actuator, custom health indicators and how they hang |
|
|
| [`spring-boot-startup-time/`](spring-boot-startup-time) | [Why Your Spring Boot App Takes 8 Seconds to Start](spring-boot-startup-time/post/post.md) | `BufferingApplicationStartup`, JFR startup events, self time vs total time, the classpath-scan tax, the JDK 25 AOT cache |
|
|
| [`configuration-properties/`](configuration-properties) | [@ConfigurationProperties vs @Value in Spring Boot 4](https://ankurm.com/) | relaxed binding measured three ways, record constructor binding, validation, IDE metadata generation |
|
|
| [`profiles-and-config/`](profiles-and-config) | [Spring Boot Profiles Done Right](https://ankurm.com/) | the precedence stack made visible, config trees and ConfigMaps, why a profile file loses to an environment variable |
|
|
| [`spring-aop/`](spring-aop) | [Spring AOP Explained](https://ankurm.com/) | every pointcut designator with real matches, JDK vs CGLIB proxies, six aspects that do not fire |
|
|
| [`docker-images/`](docker-images) | [Dockerizing Spring Boot 4: Layered Jars, Buildpacks, Distroless and Image Size Benchmarks](https://ankurm.com/dockerizing-spring-boot-4-layered-jars-buildpacks-distroless/) | 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:
|
|
|
|
```bash
|
|
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](LICENSE).
|