Migrate to Spring Boot 4, Jackson 3, and modern build tooling#1
Open
v3rm0n wants to merge 4 commits into
Open
Conversation
Complete the Spring Boot 4 migration and get the full build (compile, SpotBugs, Checkstyle, Shadow jar, integration tests) passing on Gradle 9 / Java 25. Build tooling: - Shadow plugin johnrengelman 8.1.1 -> gradleup 9.4.2 (Gradle 9 compat), rewrite the protobuf dependency filter for the new API. - SpotBugs plugin 6.0.2 -> 6.5.5, pin tool 4.9.8 so it can read Java 25 class files (major version 69). - Extend the Java 17 source/target compatibility branch to Spring Boot 4.x. Spring Boot 4: - Add spring-boot-kafka (KafkaAutoConfiguration split out of core). - Update Flyway/Validation autoconfigure imports to their new split-module packages. Jackson 3: - Switch jackson-databind coordinate from com.fasterxml.jackson.core to tools.jackson.core and migrate every ObjectMapper import to tools.jackson.databind. JsonMapper extends ObjectMapper, so call sites are unchanged. SpotBugs findings: - Remove three useless @SuppressFBWarnings (now-undetected rules). - Fix a real concurrency bug: make TkmsRegisteredMessagesCollector.enabled volatile. - Broaden the generated-proto exclusion to the StoredMessage inner classes. Test infrastructure: - Replace EOL wurstmeister/kafka:2.12-2.4.1 (broke on modern Docker API) with bitnamilegacy/kafka:3.6.0 using static port mappings. - Make KafkaConfiguration.createTopic wait until topic metadata has propagated (all partitions have a leader) before returning, fixing a startup topic-validation race that flaked under full-suite load. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Drop the exact patch/build qualifier (temurin-25.0.2+10.0.LTS) so mise resolves the latest Temurin 25.x instead of being pinned to a single build that has to be bumped by hand. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The migration drops Spring Boot 3 support, so reduce the build matrix to Spring Boot 4.0.6 (3.4.6/3.5.0 can no longer resolve the SB4-only artifacts and Jackson 3). Replace the EOL wurstmeister/kafka:2.12-2.2.0 service containers with bitnamilegacy/kafka:3.6.0 so the Kafka 4.1.2 client from Spring Boot 4 has a compatible broker. Bitnami needs explicit advertised listeners (wurstmeister auto-derived them), so set KAFKA_CFG_ADVERTISED_LISTENERS to each service's network alias. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
alvarl
approved these changes
May 29, 2026
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 & why
Completes the Spring Boot 4 migration on this branch and gets the full build green — compile, SpotBugs, Checkstyle, Shadow jar, and all integration tests — on Gradle 9 / Java 25. As a deliberate part of the migration, Jackson is moved from 2.x to 3.x (
tools.jackson).Changes
Build tooling
johnrengelman 8.1.1→gradleup 9.4.2(the old fork calls the removedFileCopyDetails.modeon Gradle 9); rewrote the protobuf dependency filter for the new API.6.0.2→6.5.5, pinned tool4.9.8so it can read Java 25 class files (major version 69).Spring Boot 4
spring-boot-kafka(KafkaAutoConfigurationwas split out ofspring-boot-autoconfigure).org.springframework.boot.flyway.autoconfigure.*,org.springframework.boot.validation.autoconfigure.*).Jackson 3
jackson-databindfromcom.fasterxml.jackson.coretotools.jackson.coreand migrated everyObjectMapperimport totools.jackson.databind.JsonMapper extends ObjectMapper, so the call sites (writeValueAsBytes,readValue) are unchanged.SpotBugs findings
@SuppressFBWarnings(rules no longer triggered).TkmsRegisteredMessagesCollector.enabledis nowvolatile.StoredMessageinner classes.Test infrastructure
wurstmeister/kafka:2.12-2.4.1(its docker-in-docker port trick breaks on the current Docker API) withbitnamilegacy/kafka:3.6.0using static port mappings.KafkaConfiguration.createTopicnow waits until topic metadata has fully propagated (every partition has an elected leader) before returning, fixing a startup topic-validation race that flaked under full-suite load.Verification
./gradlew buildpasses. Integration tests ran green across three consecutive--rerun-tasksruns (~2 min each) to confirm the topic-propagation fix is deterministic.Reviewer notes
transferwise..github/workflows/build.ymlstill pins Spring Boot3.4.6/3.5.0, butbuild.libraries.gradlenow references SB4-only artifacts and Jackson 3. The matrix should move to 4.x to match this branch.🤖 Generated with Claude Code