docs(release): document specs 018 and 021 in the 1.4.0 upgrade guide - #44
Merged
Merged
Conversation
The guide covered specs 015, 016 and 017 only; 018 (application build + SBOM info) and 021 (database reachability check) have since landed, and the java-parent 1.3.0 bump changes a transitive dependency. Adds an overview table so a reader sees the full 1.4.0 scope, plus three sections. Spec 018 gets the most space, because it is the one change that reports nothing unless the consumer wires their build: build-info with a commit additional property, git.properties enabled in the application (java-parent disables it for libraries on purpose — a shared /git.properties collides on the classpath, where only the first jar's copy is read), and the cyclonedx output redirected into META-INF/sbom so it enters the jar at all. Documents the source precedence, the autodetection order, both properties, and the guard rails that matter: an SBOM is a complete dependency inventory with versions, so an unauthenticated endpoint hands out the patch level; there is no build timestamp by design; the raw SBOM and Actuator integration are a separate module. Spec 021 documents the pool cost that is easy to miss: every call borrows a connection and nothing is cached, so an unauthenticated, unthrottled health endpoint is a way to occupy the pool. Also corrects a factual error found while writing this: the spec, two Javadoc comments and a TODO line all claimed Git metadata comes from META-INF/git.properties. Spring Boot's default for spring.info.git.location is classpath:git.properties, verified in ProjectInfoProperties, and that is also where git-commit-id-maven-plugin writes by default. Following the old text would have produced a file Spring never reads. Comments and docs only — the code injects the GitProperties bean and was always correct. Verified: full reactor build green, 134 tests. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this is
docs/releases/upgrade-to-1.4.mdcovered specs 015, 016 and 017 only. Since then 018 and 021 landedand the
java-parent1.3.0 bump changed a transitive dependency, so a consumer reading the guidetoday would miss three of the five changes in 1.4.0. Documentation only.
Adds an overview table at the top — so the full 1.4.0 scope is visible before reading — plus three
sections. Specs 019 and 020 are deliberately not documented: they are designs, not shipped code.
Spec 018 gets the most space, because it is the one that stays silent
ApplicationInfoServicereports nothing unless the consumer wires their build, and that wiring isneither obvious nor documented anywhere else. The section gives the three POM snippets and, more
importantly, why each is needed:
build-infowith acommitadditional property — the fallback Git source for container builds thathave no
.git.generateGitPropertiesFile=truein the application, with the reasonjava-parentdisables itfor libraries: a
/git.propertiesshipped by a library collides on the consumer's classpath, whereonly the first jar's copy is ever read.
META-INF/sbom— the parent'sfull-buildprofile alreadyruns
makeBom, but with the plugin default (target/bom.json) the file never enters the jar.Plus the source-precedence table, the autodetection order (Spring Boot
SbomEndpointorder), bothproperties with defaults, and the guard rails that actually matter:
attacker your patch level. The library ships no endpoint precisely so this stays your decision.
project.build.outputTimestampfixed centrally, a"build time" would describe the parent release, not your build. Use
git.commitTime.InfoContributorare a separate future module.Spec 021 documents the cost that is easy to miss
DbHealthServicenever throws and never caches — so every call borrows a pooled connection, andagainst a saturated pool it blocks for up to the pool's connection timeout. An unauthenticated,
unthrottled health endpoint calling it is therefore a way to occupy the pool. Also: it is not an
Actuator
HealthIndicator, and it answers reachability only.Dependency section
swagger-annotations-jakartamoves 2.2.29 → 2.2.47 via the parent'sswagger-bom. Nothing to do inmost applications, but consumers who pin Swagger or springdoc themselves must align the whole stack:
a split Swagger stack fails at runtime with
NoSuchMethodError, becauseswagger-corecallsannotation members that only exist in its own release.
A factual error corrected along the way
Spec 018's design, two Javadoc comments (
info/package-info.java,GitInfo.java) and one line indocs/TODO.mdall stated that Git metadata comes fromMETA-INF/git.properties.Spring Boot's default for
spring.info.git.locationisclasspath:git.properties— verified inProjectInfoProperties(new ClassPathResource("git.properties")) — and that is also exactly wheregit-commit-id-maven-pluginwrites by default. A consumer following the old text would have generateda file Spring never reads, then wondered why
GitInfostayed null. All four occurrences arecorrected; comments and docs only, since the code injects the
GitPropertiesbean and was alwaysright.
Verification
Full reactor build with tests: BUILD SUCCESS, 134 tests, no failures. (I initially quoted that
count from an earlier run whose output I had suppressed with
-q; re-ran it visibly to confirm.)🤖 Generated with Claude Code