Skip to content

feat : upgrade to spring boot 4#2

Merged
rajadilipkolli merged 36 commits into
masterfrom
SB4
May 5, 2026
Merged

feat : upgrade to spring boot 4#2
rajadilipkolli merged 36 commits into
masterfrom
SB4

Conversation

@rajadilipkolli
Copy link
Copy Markdown
Collaborator

@rajadilipkolli rajadilipkolli commented Apr 28, 2026

Summary by CodeRabbit

  • Chores
    • Upgraded Maven Wrapper to v3.3.4 and standardized projects on Apache Maven 3.9.15; legacy wrapper downloader removed across modules.
    • Rewrote wrapper scripts to download/extract/cache distributions with optional SHA‑256 verification, improved platform handling and auth fallbacks.
    • Updated POMs to enable annotation processing (Lombok) and modernized test dependencies and Testcontainers artifacts.
    • Adjusted devcontainer dind parameters and expanded VS Code extension recommendations.
    • Aligned tests/configs to new test slice packages and updated some MongoDB property keys and logging formats.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 28, 2026

Important

Review skipped

Too many files!

This PR contains 190 files, which is 40 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 0022720f-9b2d-42a1-b84a-f3f9b6d0ace6

📥 Commits

Reviewing files that changed from the base of the PR and between b994541 and 61ab092.

⛔ Files ignored due to path filters (25)
  • boot-groovy/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-kotlin-dsl/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-kotlin/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-mongo/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-mvc-freemarker/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-mvc-mustache/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-mvc-thymeleaf/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-neo4j-cypher/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-neo4j/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-pulsar/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-reactor-kafka/receiver/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-reactor-kafka/sender/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-reactor-rabbitmq/receiver/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-reactor-rabbitmq/sender/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-redis/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-start-routes/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-start/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • cache-caffeine/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • cache-redis/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • cache/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • client-apache-httpclient5/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • client-jdk11-httpclient/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • client-jetty/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • client-reactor-netty2/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • client/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
📒 Files selected for processing (190)
  • .github/workflows/boot-data-cassandra.yml
  • .github/workflows/boot-data-elasticsearch.yml
  • .github/workflows/boot-data-neo4j.yml
  • .github/workflows/boot-exception-handler.yml
  • .github/workflows/boot-mvc-mustache.yml
  • .github/workflows/boot-pulsar.yml
  • boot-data-elasticsearch/src/test/java/com/example/demo/PostRepositoryWithTestContainersTest.java
  • boot-data-neo4j/pom.xml
  • boot-data-neo4j/src/test/java/com/example/demo/PostRepositoryWithNeo4jHarnessTest.java
  • boot-exception-handler/pom.xml
  • boot-exception-handler/src/main/java/com/example/demo/DemoApplication.java
  • boot-exception-handler/src/test/java/com/example/demo/ContainerConfig.java
  • boot-exception-handler/src/test/java/com/example/demo/DemoApplicationTests.java
  • boot-groovy/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-groovy/.mvn/wrapper/maven-wrapper.properties
  • boot-groovy/mvnw
  • boot-groovy/mvnw.cmd
  • boot-groovy/pom.xml
  • boot-groovy/src/main/resources/application.yml
  • boot-groovy/src/test/groovy/com/example/demo/ApplicationTests.groovy
  • boot-groovy/src/test/groovy/com/example/demo/IntegrationTests.groovy
  • boot-kotlin-co-dsl/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-kotlin-co-dsl/.mvn/wrapper/maven-wrapper.properties
  • boot-kotlin-co-dsl/mvnw
  • boot-kotlin-co-dsl/mvnw.cmd
  • boot-kotlin-co-dsl/pom.xml
  • boot-kotlin-co-dsl/src/test/kotlin/com/example/demo/ApplicationTests.kt
  • boot-kotlin-co-dsl/src/test/kotlin/com/example/demo/TestcontainersConfiguration.kt
  • boot-kotlin-co/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-kotlin-co/.mvn/wrapper/maven-wrapper.properties
  • boot-kotlin-co/mvnw
  • boot-kotlin-co/mvnw.cmd
  • boot-kotlin-co/pom.xml
  • boot-kotlin-co/src/test/kotlin/com/example/demo/PostControllerTests.kt
  • boot-kotlin-co/src/test/kotlin/com/example/demo/PostRepositoryTest.kt
  • boot-kotlin-co/src/test/kotlin/com/example/demo/TestcontainersConfiguration.kt
  • boot-kotlin-dsl/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-kotlin-dsl/.mvn/wrapper/maven-wrapper.properties
  • boot-kotlin-dsl/mvnw
  • boot-kotlin-dsl/mvnw.cmd
  • boot-kotlin-dsl/pom.xml
  • boot-kotlin-dsl/src/test/kotlin/com/example/demo/ApplicationTests.kt
  • boot-kotlin/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-kotlin/.mvn/wrapper/maven-wrapper.properties
  • boot-kotlin/mvnw
  • boot-kotlin/mvnw.cmd
  • boot-kotlin/pom.xml
  • boot-kotlin/src/main/resources/application.yml
  • boot-kotlin/src/test/kotlin/com/example/demo/PostControllerTests.kt
  • boot-mongo/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-mongo/.mvn/wrapper/maven-wrapper.properties
  • boot-mongo/mvnw
  • boot-mongo/mvnw.cmd
  • boot-mongo/pom.xml
  • boot-mongo/src/main/resources/application.properties
  • boot-mongo/src/test/java/com/example/demo/ApplicationTests.java
  • boot-mongo/src/test/java/com/example/demo/IntegrationTests.java
  • boot-mongo/src/test/java/com/example/demo/MongodbContainerInitializer.java
  • boot-mongo/src/test/java/com/example/demo/PostControllerTests.java
  • boot-mongo/src/test/java/com/example/demo/PostRepositoryPageableTest.java
  • boot-mongo/src/test/java/com/example/demo/PostRepositoryTest.java
  • boot-mvc-freemarker/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-mvc-freemarker/.mvn/wrapper/maven-wrapper.properties
  • boot-mvc-freemarker/mvnw
  • boot-mvc-freemarker/mvnw.cmd
  • boot-mvc-freemarker/pom.xml
  • boot-mvc-freemarker/src/main/resources/application.yml
  • boot-mvc-mustache/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-mvc-mustache/.mvn/wrapper/maven-wrapper.properties
  • boot-mvc-mustache/mvnw
  • boot-mvc-mustache/mvnw.cmd
  • boot-mvc-mustache/pom.xml
  • boot-mvc-mustache/src/main/resources/application.yml
  • boot-mvc-thymeleaf/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-mvc-thymeleaf/.mvn/wrapper/maven-wrapper.properties
  • boot-mvc-thymeleaf/mvnw
  • boot-mvc-thymeleaf/mvnw.cmd
  • boot-mvc-thymeleaf/pom.xml
  • boot-neo4j-cypher/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-neo4j-cypher/.mvn/wrapper/maven-wrapper.properties
  • boot-neo4j-cypher/mvnw
  • boot-neo4j-cypher/mvnw.cmd
  • boot-neo4j-cypher/pom.xml
  • boot-neo4j/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-neo4j/.mvn/wrapper/maven-wrapper.properties
  • boot-neo4j/mvnw
  • boot-neo4j/mvnw.cmd
  • boot-neo4j/pom.xml
  • boot-neo4j/src/test/java/com/example/demo/PostRepositoryTest.java
  • boot-pulsar/.mvn/wrapper/maven-wrapper.properties
  • boot-pulsar/mvnw
  • boot-pulsar/mvnw.cmd
  • boot-pulsar/pom.xml
  • boot-pulsar/src/test/java/com/example/demo/PulsarIntegrationTests.java
  • boot-reactor-kafka/receiver/.mvn/wrapper/maven-wrapper.properties
  • boot-reactor-kafka/receiver/mvnw
  • boot-reactor-kafka/receiver/mvnw.cmd
  • boot-reactor-kafka/receiver/pom.xml
  • boot-reactor-kafka/receiver/src/main/java/com/example/demo/ReceiverApplication.java
  • boot-reactor-kafka/sender/.mvn/wrapper/maven-wrapper.properties
  • boot-reactor-kafka/sender/mvnw
  • boot-reactor-kafka/sender/mvnw.cmd
  • boot-reactor-kafka/sender/pom.xml
  • boot-reactor-kafka/sender/src/main/java/com/example/demo/SenderApplication.java
  • boot-reactor-rabbitmq/receiver/.mvn/wrapper/maven-wrapper.properties
  • boot-reactor-rabbitmq/receiver/mvnw
  • boot-reactor-rabbitmq/receiver/mvnw.cmd
  • boot-reactor-rabbitmq/receiver/pom.xml
  • boot-reactor-rabbitmq/receiver/src/main/java/com/example/demo/ReceiverApplication.java
  • boot-reactor-rabbitmq/sender/.mvn/wrapper/maven-wrapper.properties
  • boot-reactor-rabbitmq/sender/mvnw
  • boot-reactor-rabbitmq/sender/mvnw.cmd
  • boot-reactor-rabbitmq/sender/pom.xml
  • boot-reactor-rabbitmq/sender/src/main/java/com/example/demo/SenderApplication.java
  • boot-redis/.mvn/wrapper/maven-wrapper.properties
  • boot-redis/mvnw
  • boot-redis/mvnw.cmd
  • boot-redis/pom.xml
  • boot-redis/src/main/java/com/example/demo/DemoApplication.java
  • boot-redis/src/test/java/com/example/demo/DemoApplicationTests.java
  • boot-start-routes/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-start-routes/.mvn/wrapper/maven-wrapper.properties
  • boot-start-routes/mvnw
  • boot-start-routes/mvnw.cmd
  • boot-start-routes/pom.xml
  • boot-start-routes/src/test/java/com/example/demo/ApplicationTest.java
  • boot-start-routes/src/test/java/com/example/demo/IntegrationTests.java
  • boot-start/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-start/.mvn/wrapper/maven-wrapper.properties
  • boot-start/mvnw
  • boot-start/mvnw.cmd
  • boot-start/pom.xml
  • boot-start/src/test/java/com/example/demo/ApplicationTest.java
  • boot-start/src/test/java/com/example/demo/IntegrationTests.java
  • boot-start/src/test/java/com/example/demo/PostControllerTest.java
  • cache-caffeine/.mvn/wrapper/MavenWrapperDownloader.java
  • cache-caffeine/.mvn/wrapper/maven-wrapper.properties
  • cache-caffeine/mvnw
  • cache-caffeine/mvnw.cmd
  • cache-caffeine/pom.xml
  • cache-caffeine/src/test/java/com/example/demo/domain/PostRepositoryTest.java
  • cache-redis/.mvn/wrapper/MavenWrapperDownloader.java
  • cache-redis/.mvn/wrapper/maven-wrapper.properties
  • cache-redis/mvnw
  • cache-redis/mvnw.cmd
  • cache-redis/pom.xml
  • cache-redis/src/test/java/com/example/demo/domain/PostRepositoryTest.java
  • cache/.mvn/wrapper/MavenWrapperDownloader.java
  • cache/.mvn/wrapper/maven-wrapper.properties
  • cache/mvnw
  • cache/mvnw.cmd
  • cache/pom.xml
  • cache/src/test/java/com/example/demo/domain/PostRepositoryTest.java
  • client-apache-httpclient5/.mvn/wrapper/MavenWrapperDownloader.java
  • client-apache-httpclient5/.mvn/wrapper/maven-wrapper.properties
  • client-apache-httpclient5/mvnw
  • client-apache-httpclient5/mvnw.cmd
  • client-apache-httpclient5/pom.xml
  • client-apache-httpclient5/src/main/java/com/example/demo/ClientConfig.java
  • client-apache-httpclient5/src/main/java/com/example/demo/Jackson2ObjectMapperConfig.java
  • client-apache-httpclient5/src/test/java/com/example/demo/PostClientTest.java
  • client-jdk11-httpclient/.mvn/wrapper/MavenWrapperDownloader.java
  • client-jdk11-httpclient/.mvn/wrapper/maven-wrapper.properties
  • client-jdk11-httpclient/mvnw
  • client-jdk11-httpclient/mvnw.cmd
  • client-jdk11-httpclient/pom.xml
  • client-jdk11-httpclient/src/main/java/com/example/demo/ClientConfig.java
  • client-jdk11-httpclient/src/main/java/com/example/demo/Jackson2ObjectMapperConfig.java
  • client-jdk11-httpclient/src/test/java/com/example/demo/PostClientTest.java
  • client-jetty/.mvn/wrapper/MavenWrapperDownloader.java
  • client-jetty/.mvn/wrapper/maven-wrapper.properties
  • client-jetty/mvnw
  • client-jetty/mvnw.cmd
  • client-jetty/pom.xml
  • client-jetty/src/main/java/com/example/demo/ClientConfig.java
  • client-jetty/src/main/java/com/example/demo/Jackson2ObjectMapperConfig.java
  • client-jetty/src/test/java/com/example/demo/PostClientTest.java
  • client-reactor-netty2/.mvn/wrapper/MavenWrapperDownloader.java
  • client-reactor-netty2/.mvn/wrapper/maven-wrapper.properties
  • client-reactor-netty2/mvnw
  • client-reactor-netty2/mvnw.cmd
  • client-reactor-netty2/src/test/java/com/example/demo/PostClientTest.java
  • client/.mvn/wrapper/MavenWrapperDownloader.java
  • client/.mvn/wrapper/maven-wrapper.properties
  • client/mvnw
  • client/mvnw.cmd
  • client/pom.xml
  • client/src/main/java/com/example/demo/ClientConfig.java
  • client/src/main/java/com/example/demo/Jackson2ObjectMapperConfig.java
  • client/src/test/java/com/example/demo/PostClientTest.java

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Maven Wrapper migrated to v3.3.4 across modules: Takari downloader classes removed, wrapper properties now use Maven 3.9.15 with distributionType=only-script, and shell/PowerShell/batch wrapper entrypoints rewritten to download/extract/exec distributions. Also: devcontainer tweaks, POM compiler/annotation-processor additions, and test/import/logging updates.

Changes

Cohort / File(s) Summary
DevContainer
\.devcontainer/devcontainer.json
Parameterize docker-in-docker (version: "latest", moby: false) and expand Java-related VS Code extensions list.
Wrapper properties
boot-*/.mvn/wrapper/maven-wrapper.properties
Replace Takari wrapperUrl with wrapperVersion=3.3.4, set distributionType=only-script, and update distributionUrl to Maven 3.9.15.
Wrapper entry scripts (unix & windows)
boot-*/mvnw, boot-*/mvnw.cmd
Replace wrapper-jar flow with v3.3.4-style logic that computes hashed MAVEN_HOME under ~/.m2/wrapper/dists, downloads/extracts distributions, optional SHA-256 validation, supports MVNW_REPOURL/MVNW_USERNAME/MVNW_PASSWORD, and execs the extracted Maven.
Removed Takari downloader classes
boot-*/.mvn/wrapper/MavenWrapperDownloader.java
Delete per-module Java downloader that previously fetched maven-wrapper.jar.
POM & compiler updates
boot-*/pom.xml, boot-mongo/pom.xml, boot-groovy/pom.xml, boot-mvc-mustache/pom.xml, data-redis-message/pom.xml, sse/pom.xml, ...
Bump Spring Boot parents in many modules, update test/Testcontainers coordinates, and add maven-compiler-plugin annotationProcessorPaths entries to enable Lombok annotation processing.
Source & tests — imports / small tweaks
boot-*/src/main/java/.../DemoApplication.java, boot-*/src/test/java/.../*.java, boot-*/src/test/groovy/...
Replace a Lombok @Slf4j with explicit SLF4J logger in one class; update many test annotation/import package paths to org.springframework.boot.data.*, adjust Testcontainers imports/generic types, add @AutoConfigureWebTestClient in tests, and swap some mocks to @MockitoBean.
Test container config additions
boot-data-elasticsearch/src/test/java/.../ContainersConfig.java, .../TestDemoApplication.java
Add shared Testcontainers Elasticsearch bean annotated with @ServiceConnection and a test application entrypoint that wires in the containers config.
CI workflow updates
.github/workflows/*.yml
Set per-job working-directory to module directories and use ./mvnw instead of system mvn.

Sequence Diagram(s)

sequenceDiagram
    participant Dev as Developer
    participant Wrapper as Wrapper script (`mvnw` / `mvnw.cmd`)
    participant Repo as Remote distribution (distributionUrl / MVNW_REPOURL)
    participant Cache as Local cache (~/.m2/wrapper/dists)
    participant Maven as Extracted Maven/bin

    Dev->>Wrapper: run ./mvnw (args)
    Wrapper->>Cache: compute hash from distributionUrl
    alt cached distribution exists
        Cache-->>Wrapper: installed path
    else
        Wrapper->>Repo: download distribution (wget/curl/Java fallback)
        Repo-->>Wrapper: send archive
        Wrapper->>Wrapper: verify SHA-256 (if configured)
        Wrapper->>Wrapper: extract and locate distribution dir
        Wrapper->>Cache: move extracted dir to hashed path
    end
    Wrapper->>Maven: exec <cache>/bin/mvn with args
    Maven-->>Dev: build runs
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Poem

🐰 I hopped through wrappers, scripts, and tar,
Old downloader gone, new hashes set to star,
Downloads, checks, and caches snug and neat,
Maven springs to life — swift, verified, complete,
A happy rabbit cheers: "Build on, fleet feet!"

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch SB4

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
.devcontainer/devcontainer.json (1)

14-17: Pin the Docker-in-Docker version to a tested value (avoid latest).

Using "version": "latest" on line 15 makes the devcontainer non-reproducible and can introduce unexpected breakage when upstream changes. Prefer a fixed, team-validated version.

Suggested change
 		"ghcr.io/devcontainers/features/docker-in-docker:2": {
-			"version": "latest",
+			"version": "<tested-version>",
 			"moby": false
 		}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.devcontainer/devcontainer.json around lines 14 - 17, Replace the unpinned
"version": "latest" for the docker-in-docker feature entry
("ghcr.io/devcontainers/features/docker-in-docker:2") with a specific,
team-tested semantic version string (e.g., the exact tag you validated) to make
the devcontainer reproducible; update the JSON value for "version" accordingly
and record the chosen tag in your devcontainer documentation or CHANGELOG so
future updates are deliberate.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@boot-data-cassandra/.mvn/wrapper/maven-wrapper.properties`:
- Around line 1-3: Add a distributionSha256Sum property to the maven-wrapper
properties so the wrapper verifies the downloaded archive: in the same block
containing wrapperVersion, distributionType and distributionUrl add
distributionSha256Sum and set it to the official SHA-256 value for
apache-maven-3.9.15-bin.zip (copy the checksum from the Apache Maven
download/release page or the Maven distribution repository to ensure it matches
exactly), ensuring the key is named distributionSha256Sum and the value
corresponds to the distributionUrl entry.

---

Nitpick comments:
In @.devcontainer/devcontainer.json:
- Around line 14-17: Replace the unpinned "version": "latest" for the
docker-in-docker feature entry
("ghcr.io/devcontainers/features/docker-in-docker:2") with a specific,
team-tested semantic version string (e.g., the exact tag you validated) to make
the devcontainer reproducible; update the JSON value for "version" accordingly
and record the chosen tag in your devcontainer documentation or CHANGELOG so
future updates are deliberate.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 9228924e-707a-47a0-a909-f1aca69f3863

📥 Commits

Reviewing files that changed from the base of the PR and between 5488edd and ee81696.

⛔ Files ignored due to path filters (1)
  • boot-data-cassandra/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
📒 Files selected for processing (5)
  • .devcontainer/devcontainer.json
  • boot-data-cassandra/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-data-cassandra/.mvn/wrapper/maven-wrapper.properties
  • boot-data-cassandra/mvnw
  • boot-data-cassandra/mvnw.cmd
💤 Files with no reviewable changes (1)
  • boot-data-cassandra/.mvn/wrapper/MavenWrapperDownloader.java

Comment thread boot-data-cassandra/.mvn/wrapper/maven-wrapper.properties
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (2)
.devcontainer/devcontainer.json (1)

14-17: Pin docker-in-docker version to a concrete stable version instead of "latest".

Using "latest" makes devcontainer rebuilds non-deterministic and risks unexpected breakage across rebuilds. Pin to a specific version like "2.16.1" (current stable), "2.16" (latest patch of minor), or another stable tag such as "2.12.0". This ensures reproducible builds and consistent CI behavior.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.devcontainer/devcontainer.json around lines 14 - 17, The devcontainer is
using an unstable tag for the docker-in-docker feature: update the "version"
value under the "ghcr.io/devcontainers/features/docker-in-docker:2" entry
(currently "latest") to a concrete stable tag (e.g., "2.16.1" or "2.16") to
ensure reproducible builds; change the "version": "latest" line to the chosen
pinned version and commit the updated .devcontainer/devcontainer.json.
boot-data-cassandra/src/test/java/com/example/demo/PostRepositoryWithTestContainersTest.java (1)

30-30: Pin the Cassandra container image tag to a stable version.

At line 30, new CassandraContainer("cassandra") uses an unpinned tag that is mutable and can lead to flaky tests. Pin to a stable version like cassandra:4.1 or cassandra:5.0 (e.g., new CassandraContainer("cassandra:4.1")).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@boot-data-cassandra/src/test/java/com/example/demo/PostRepositoryWithTestContainersTest.java`
at line 30, Replace the unpinned testcontainers image by specifying a stable
Cassandra tag: update the CassandraContainer instantiation in
PostRepositoryWithTestContainersTest (the static CassandraContainer
cassandraContainer = new CassandraContainer("cassandra")) to use a fixed version
string such as "cassandra:4.1" (e.g., new CassandraContainer("cassandra:4.1"))
so tests are deterministic.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@boot-data-couchbase/pom.xml`:
- Line 59: The POM uses incorrect Testcontainers artifactId values: replace the
artifactId elements 'testcontainers-junit-jupiter' and
'testcontainers-couchbase' with the correct Testcontainers artifact IDs
'junit-jupiter' and 'couchbase' respectively so Maven can resolve the
dependencies; update the <dependency> entries that contain those artifactId tags
to use 'junit-jupiter' and 'couchbase' while keeping the existing groupId
(org.testcontainers) and version.

In `@boot-data-elasticsearch/mvnw`:
- Around line 178-182: The script changes distributionUrl to .tar.gz when unzip
is unavailable but leaves distributionSha256Sum (and any checksum validation
block that reads distributionSha256Sum) tied to the original .zip, causing
checksum mismatch; update the fallback logic in the same block that modifies
distributionUrl/distributionUrlName to also update or re-read
distributionSha256Sum to the corresponding .tar.gz checksum (or compute/select
the correct checksum entry) so the checksum validation later (the block that
uses distributionSha256Sum) matches the archive format; look for the variables
distributionUrl, distributionUrlName and distributionSha256Sum to implement this
change.

In `@boot-data-elasticsearch/pom.xml`:
- Line 53: The pom declares incorrect Testcontainers artifactIds causing Maven
resolution failures: update any <artifactId> elements using
"testcontainers-junit-jupiter" to "junit-jupiter" and
"testcontainers-elasticsearch" to "elasticsearch" (i.e., fix the Testcontainers
dependency artifactId values in the pom so they match the official coordinates),
then re-run mvn test to verify resolution.

In `@boot-data-mongo/mvnw`:
- Around line 178-182: When switching the artifact from .zip to .tar.gz (when
unzip is missing) also swap the checksum variable so the SHA-256 check matches
the chosen file: after you update distributionUrl and distributionUrlName in
that conditional, set distributionSha256Sum to distributionSha256SumTarGz (if
that var is defined) or otherwise look up the .tar.gz checksum equivalent; do
the same update in the duplicate block covering lines 225-248 so both bootstrap
branches use the matching distributionSha256Sum for the chosen extension
(reference symbols: distributionUrl, distributionUrlName, distributionSha256Sum,
distributionSha256SumTarGz).

---

Nitpick comments:
In @.devcontainer/devcontainer.json:
- Around line 14-17: The devcontainer is using an unstable tag for the
docker-in-docker feature: update the "version" value under the
"ghcr.io/devcontainers/features/docker-in-docker:2" entry (currently "latest")
to a concrete stable tag (e.g., "2.16.1" or "2.16") to ensure reproducible
builds; change the "version": "latest" line to the chosen pinned version and
commit the updated .devcontainer/devcontainer.json.

In
`@boot-data-cassandra/src/test/java/com/example/demo/PostRepositoryWithTestContainersTest.java`:
- Line 30: Replace the unpinned testcontainers image by specifying a stable
Cassandra tag: update the CassandraContainer instantiation in
PostRepositoryWithTestContainersTest (the static CassandraContainer
cassandraContainer = new CassandraContainer("cassandra")) to use a fixed version
string such as "cassandra:4.1" (e.g., new CassandraContainer("cassandra:4.1"))
so tests are deterministic.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 4ad0d79d-3c03-4e17-83f6-34f2108a0617

📥 Commits

Reviewing files that changed from the base of the PR and between ee81696 and 26dc991.

⛔ Files ignored due to path filters (3)
  • boot-data-couchbase/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-data-elasticsearch/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-data-mongo/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
📒 Files selected for processing (18)
  • .devcontainer/devcontainer.json
  • boot-data-cassandra/pom.xml
  • boot-data-cassandra/src/main/java/com/example/demo/DemoApplication.java
  • boot-data-cassandra/src/test/java/com/example/demo/PostRepositoryWithTestContainersTest.java
  • boot-data-couchbase/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-data-couchbase/.mvn/wrapper/maven-wrapper.properties
  • boot-data-couchbase/mvnw
  • boot-data-couchbase/mvnw.cmd
  • boot-data-couchbase/pom.xml
  • boot-data-elasticsearch/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-data-elasticsearch/.mvn/wrapper/maven-wrapper.properties
  • boot-data-elasticsearch/mvnw
  • boot-data-elasticsearch/mvnw.cmd
  • boot-data-elasticsearch/pom.xml
  • boot-data-mongo/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-data-mongo/.mvn/wrapper/maven-wrapper.properties
  • boot-data-mongo/mvnw
  • boot-data-mongo/mvnw.cmd
💤 Files with no reviewable changes (3)
  • boot-data-couchbase/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-data-elasticsearch/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-data-mongo/.mvn/wrapper/MavenWrapperDownloader.java
✅ Files skipped from review due to trivial changes (1)
  • boot-data-mongo/.mvn/wrapper/maven-wrapper.properties

Comment thread boot-data-couchbase/pom.xml
Comment thread boot-data-elasticsearch/mvnw
Comment thread boot-data-elasticsearch/pom.xml
Comment thread boot-data-mongo/mvnw
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (7)
boot-data-mongo-gridfs/src/test/java/com/example/demo/DemoApplicationTests.java (1)

48-58: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add an explicit null-body assertion before JSON deserialization.

At Line 57, readValue(result, Map.class) will fail with a less clear error when result is null. Assert early for clearer diagnostics.

Suggested patch
         byte[] result = client
                 .post()
                 .uri("/multipart")
                 .bodyValue(generateBody())
                 .exchange()
                 .expectStatus().isOk()
                 .expectBody().returnResult().getResponseBody();

+        assertNotNull(result, "Expected non-null response body from /multipart upload");
         ObjectMapper objectMapper = new JsonMapper();
         Map bodyMap = objectMapper.readValue(result, Map.class);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@boot-data-mongo-gridfs/src/test/java/com/example/demo/DemoApplicationTests.java`
around lines 48 - 58, In DemoApplicationTests, before calling
objectMapper.readValue(result, Map.class), add an explicit null check on the
response byte[] (the local variable result returned from
client.post()...expectBody().returnResult().getResponseBody()) by using
Assertions.assertNotNull(result, "Response body is null for /multipart request")
(or equivalent) to fail fast with a clear message; this ensures the test aborts
with a helpful diagnostic instead of a confusing JSON deserialization error in
the readValue call.
sse/pom.xml (1)

15-20: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Spring Boot parent version not upgraded.

This module still uses Spring Boot 3.4.0. Consider aligning with the Spring Boot 4 upgrade objective.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@sse/pom.xml` around lines 15 - 20, The pom.xml parent block still references
Spring Boot 3.4.0; update the <parent> version element for
spring-boot-starter-parent to the target Spring Boot 4.x release (e.g., 4.0.0)
so this module aligns with the Spring Boot 4 upgrade objective, then run a full
build and fix any API or dependency compatibility issues surfaced by the change
(look for usage of spring-boot-starter-parent, the <version> element under
<parent>, and any plugin/dependency versions that may need adjusting).
mvc-mustache/pom.xml (2)

14-19: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Spring Boot parent version not upgraded.

This module still uses Spring Boot 3.4.0 while the PR objective is to upgrade to Spring Boot 4. Other modules in this PR (boot-data-mongo, boot-data-elasticsearch, boot-data-mongo-gridfs) have been upgraded to 4.0.6. Consider aligning this module with the upgrade or clarifying if it should remain on 3.x intentionally.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@mvc-mustache/pom.xml` around lines 14 - 19, The parent Spring Boot version in
the pom.xml still shows <parent> ...
<artifactId>spring-boot-starter-parent</artifactId> with
<version>3.4.0</version>; update that <version> value to match the other modules
(for example 4.0.6) so this module uses Spring Boot 4, or explicitly document in
this module why it must remain on 3.x if that's intentional; locate the parent
block in mvc-mustache's pom.xml (the <parent> .. </parent> section) and change
the <version> element accordingly.

136-136: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Typo in mainClass: "Applicationlication" should be "Application".

The mainClass appears to have a typo that would prevent the assembly jar from running correctly.

Proposed fix
-                            <mainClass>com.example.demo.Applicationlication</mainClass>
+                            <mainClass>com.example.demo.Application</mainClass>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@mvc-mustache/pom.xml` at line 136, The pom.xml has a typo in the <mainClass>
element: "com.example.demo.Applicationlication" should be the actual application
main class; update the <mainClass> value to "com.example.demo.Application" (or
the real main class name) so the assembly jar can locate and run the correct
main method.
data-redis-message/pom.xml (1)

14-19: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Spring Boot parent version not upgraded.

This module still uses Spring Boot 3.4.0. For consistency with the PR's upgrade objective, consider upgrading to 4.0.6 or clarifying the scope of the upgrade.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@data-redis-message/pom.xml` around lines 14 - 19, Update the Spring Boot
parent version in the POM by changing the <parent> -> <version> value from 3.4.0
to 4.0.6 (the block containing groupId org.springframework.boot and artifactId
spring-boot-starter-parent), then run a quick build to verify compatibility and
update any module-specific dependency or plugin versions if the 4.x upgrade
surfaces breaks; if you intentionally do not want to upgrade this module, add a
short comment in the POM explaining the scope and rationale so reviewers know
the version divergence is deliberate.
boot-mongo/pom.xml (1)

14-19: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Spring Boot parent version not upgraded.

This module still uses Spring Boot 3.4.0 while the PR objective is to upgrade to Spring Boot 4. Consider aligning with other upgraded modules (4.0.6) or documenting why this module should remain on 3.x.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@boot-mongo/pom.xml` around lines 14 - 19, The pom's Spring Boot parent
remains at version 3.4.0 inside the <parent> block; update that parent version
to the project's target (e.g., 4.0.6) so this module aligns with other upgraded
modules, or if it must stay on 3.x, add a brief comment in the <parent> section
explaining why this module is excluded from the upgrade and document any
compatibility constraints in the module's README or pom.xml comments; ensure the
change is applied to the <version> element under the <parent> tag referencing
org.springframework.boot:spring-boot-starter-parent.
boot-data-elasticsearch/src/test/java/com/example/demo/PostRepositoryWithTestContainersTest.java (1)

22-22: ⚠️ Potential issue | 🔴 Critical

Add explicit reactor-test dependency to pom.xml.

The test imports reactor.test.StepVerifier and uses it in the testLoadData() method, but reactor-test is not available as a transitive dependency. Verification confirms that reactor-test is not included via spring-boot-starter-webflux-test or spring-boot-starter-data-elasticsearch-test. Add an explicit test-scoped dependency:

<dependency>
    <groupId>io.projectreactor</groupId>
    <artifactId>reactor-test</artifactId>
    <scope>test</scope>
</dependency>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@boot-data-elasticsearch/src/test/java/com/example/demo/PostRepositoryWithTestContainersTest.java`
at line 22, Add an explicit test-scoped reactor-test dependency to the project's
pom.xml so StepVerifier (imported in PostRepositoryWithTestContainersTest and
used in testLoadData()) is available at test time; add the dependency with
groupId io.projectreactor, artifactId reactor-test, and scope test.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@boot-data-elasticsearch/src/test/java/com/example/demo/PostRepositoryWithTestContainersTest.java`:
- Around line 43-50: Update the Elasticsearch test container image used by the
static ElasticsearchContainer esContainer to a 9.x build (e.g.,
"docker.elastic.co/elasticsearch/elasticsearch:9.2.8") so it matches Spring Boot
4.0.6/elasticsearch-java 9.x; locate the static esContainer declaration and
replace the image reference
"docker.elastic.co/elasticsearch/elasticsearch:8.11.3" with the 9.x tag, keeping
the existing environment settings and startup timeout (adjust env keys if
necessary for ES9 compatibility).

In `@boot-data-mongo-gridfs/mvnw.cmd`:
- Around line 91-96: The code assumes (Get-Item $MAVEN_M2_PATH).Target[0] is
always present and indexes it directly; guard the Target property before
indexing by checking that (Get-Item $MAVEN_M2_PATH).Target is not $null and has
at least one element (or a non-empty value) before using [0]; update the
conditional that sets MAVEN_WRAPPER_DISTS to first test the Target property (for
example via -ne $null and -and length check) and only then use Target[0],
otherwise fall back to the existing path logic that appends "/wrapper/dists" to
$MAVEN_M2_PATH or uses the wrapper/dists subpath. Ensure you reference
MAVEN_M2_PATH, Get-Item, Target, Target[0], and MAVEN_WRAPPER_DISTS when making
the change.

In
`@boot-data-mongo-querydsl/src/test/java/com/example/demo/PostRepositoryTest.java`:
- Line 8: In PostRepositoryTest update the malformed import: replace the
incorrect import statement referencing
org.springframework.boot.data.mongo.test.autoconfigureDataMongoTest with the
correct Spring Boot 4 MongoDB test import
org.springframework.boot.data.mongodb.test.autoconfigure.DataMongoTest so the
PostRepositoryTest class compiles; locate the import at the top of the
PostRepositoryTest file and adjust it accordingly.

In `@boot-data-mongo/pom.xml`:
- Around line 55-64: Update the two Testcontainers dependency artifactIds in
boot-data-mongo's POM: change artifactId "testcontainers-junit-jupiter" to
"junit-jupiter" and change "testcontainers-mongodb" to "mongodb" so they match
the official short names used elsewhere; locate the dependency entries with
groupId "org.testcontainers" and replace the artifactId values accordingly for
the dependencies currently declared in the POM.

---

Outside diff comments:
In
`@boot-data-elasticsearch/src/test/java/com/example/demo/PostRepositoryWithTestContainersTest.java`:
- Line 22: Add an explicit test-scoped reactor-test dependency to the project's
pom.xml so StepVerifier (imported in PostRepositoryWithTestContainersTest and
used in testLoadData()) is available at test time; add the dependency with
groupId io.projectreactor, artifactId reactor-test, and scope test.

In
`@boot-data-mongo-gridfs/src/test/java/com/example/demo/DemoApplicationTests.java`:
- Around line 48-58: In DemoApplicationTests, before calling
objectMapper.readValue(result, Map.class), add an explicit null check on the
response byte[] (the local variable result returned from
client.post()...expectBody().returnResult().getResponseBody()) by using
Assertions.assertNotNull(result, "Response body is null for /multipart request")
(or equivalent) to fail fast with a clear message; this ensures the test aborts
with a helpful diagnostic instead of a confusing JSON deserialization error in
the readValue call.

In `@boot-mongo/pom.xml`:
- Around line 14-19: The pom's Spring Boot parent remains at version 3.4.0
inside the <parent> block; update that parent version to the project's target
(e.g., 4.0.6) so this module aligns with other upgraded modules, or if it must
stay on 3.x, add a brief comment in the <parent> section explaining why this
module is excluded from the upgrade and document any compatibility constraints
in the module's README or pom.xml comments; ensure the change is applied to the
<version> element under the <parent> tag referencing
org.springframework.boot:spring-boot-starter-parent.

In `@data-redis-message/pom.xml`:
- Around line 14-19: Update the Spring Boot parent version in the POM by
changing the <parent> -> <version> value from 3.4.0 to 4.0.6 (the block
containing groupId org.springframework.boot and artifactId
spring-boot-starter-parent), then run a quick build to verify compatibility and
update any module-specific dependency or plugin versions if the 4.x upgrade
surfaces breaks; if you intentionally do not want to upgrade this module, add a
short comment in the POM explaining the scope and rationale so reviewers know
the version divergence is deliberate.

In `@mvc-mustache/pom.xml`:
- Around line 14-19: The parent Spring Boot version in the pom.xml still shows
<parent> ... <artifactId>spring-boot-starter-parent</artifactId> with
<version>3.4.0</version>; update that <version> value to match the other modules
(for example 4.0.6) so this module uses Spring Boot 4, or explicitly document in
this module why it must remain on 3.x if that's intentional; locate the parent
block in mvc-mustache's pom.xml (the <parent> .. </parent> section) and change
the <version> element accordingly.
- Line 136: The pom.xml has a typo in the <mainClass> element:
"com.example.demo.Applicationlication" should be the actual application main
class; update the <mainClass> value to "com.example.demo.Application" (or the
real main class name) so the assembly jar can locate and run the correct main
method.

In `@sse/pom.xml`:
- Around line 15-20: The pom.xml parent block still references Spring Boot
3.4.0; update the <parent> version element for spring-boot-starter-parent to the
target Spring Boot 4.x release (e.g., 4.0.0) so this module aligns with the
Spring Boot 4 upgrade objective, then run a full build and fix any API or
dependency compatibility issues surfaced by the change (look for usage of
spring-boot-starter-parent, the <version> element under <parent>, and any
plugin/dependency versions that may need adjusting).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a69e6789-ed66-407b-9691-766456cd2e52

📥 Commits

Reviewing files that changed from the base of the PR and between 26dc991 and 8cb58a5.

⛔ Files ignored due to path filters (3)
  • boot-data-mongo-gridfs/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-data-mongo-querydsl/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-data-neo4j/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
📒 Files selected for processing (40)
  • boot-data-couchbase/pom.xml
  • boot-data-couchbase/src/test/java/com/example/demo/PostRepositoryTest.java
  • boot-data-couchbase/src/test/java/com/example/demo/PostRepositoryWithTestcontainersTest.java
  • boot-data-elasticsearch/pom.xml
  • boot-data-elasticsearch/src/test/java/com/example/demo/PostRepositoryWithTestContainersTest.java
  • boot-data-mongo-gridfs/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-data-mongo-gridfs/.mvn/wrapper/maven-wrapper.properties
  • boot-data-mongo-gridfs/mvnw
  • boot-data-mongo-gridfs/mvnw.cmd
  • boot-data-mongo-gridfs/pom.xml
  • boot-data-mongo-gridfs/src/test/java/com/example/demo/DemoApplicationTests.java
  • boot-data-mongo-querydsl/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-data-mongo-querydsl/.mvn/wrapper/maven-wrapper.properties
  • boot-data-mongo-querydsl/mvnw
  • boot-data-mongo-querydsl/mvnw.cmd
  • boot-data-mongo-querydsl/pom.xml
  • boot-data-mongo-querydsl/src/test/java/com/example/demo/PostControllerTests.java
  • boot-data-mongo-querydsl/src/test/java/com/example/demo/PostRepositoryTest.java
  • boot-data-mongo/pom.xml
  • boot-data-mongo/src/main/resources/application.properties
  • boot-data-mongo/src/test/java/com/example/demo/ApplicationTests.java
  • boot-data-mongo/src/test/java/com/example/demo/IntegrationTests.java
  • boot-data-mongo/src/test/java/com/example/demo/MongodbContainerInitializer.java
  • boot-data-mongo/src/test/java/com/example/demo/PostControllerTests.java
  • boot-data-mongo/src/test/java/com/example/demo/PostRepositoryPageableTest.java
  • boot-data-mongo/src/test/java/com/example/demo/PostRepositoryTest.java
  • boot-data-mongo/src/test/java/com/example/demo/PostRepositoryWithDynamicPropertiesTest.java
  • boot-data-mongo/src/test/java/com/example/demo/PostRepositoryWithEmbeddedMongoTest.java
  • boot-data-neo4j/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-data-neo4j/.mvn/wrapper/maven-wrapper.properties
  • boot-data-neo4j/mvnw
  • boot-data-neo4j/mvnw.cmd
  • boot-data-neo4j/pom.xml
  • boot-data-neo4j/src/test/java/com/example/demo/PostRepositoryTest.java
  • boot-data-neo4j/src/test/java/com/example/demo/PostRepositoryWithNeo4jHarnessTest.java
  • boot-data-neo4j/src/test/java/com/example/demo/TestDemoApplication.java
  • boot-mongo/pom.xml
  • data-redis-message/pom.xml
  • mvc-mustache/pom.xml
  • sse/pom.xml
💤 Files with no reviewable changes (3)
  • boot-data-mongo-gridfs/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-data-mongo-querydsl/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-data-neo4j/.mvn/wrapper/MavenWrapperDownloader.java
✅ Files skipped from review due to trivial changes (16)
  • boot-data-mongo/src/main/resources/application.properties
  • boot-data-mongo/src/test/java/com/example/demo/PostRepositoryTest.java
  • boot-data-mongo/src/test/java/com/example/demo/MongodbContainerInitializer.java
  • boot-data-mongo/src/test/java/com/example/demo/PostRepositoryPageableTest.java
  • boot-data-mongo/src/test/java/com/example/demo/PostRepositoryWithEmbeddedMongoTest.java
  • boot-data-mongo/src/test/java/com/example/demo/ApplicationTests.java
  • boot-data-mongo-gridfs/.mvn/wrapper/maven-wrapper.properties
  • boot-data-neo4j/src/test/java/com/example/demo/PostRepositoryTest.java
  • boot-data-mongo-querydsl/.mvn/wrapper/maven-wrapper.properties
  • boot-data-mongo/src/test/java/com/example/demo/PostRepositoryWithDynamicPropertiesTest.java
  • boot-data-neo4j/.mvn/wrapper/maven-wrapper.properties
  • boot-data-couchbase/src/test/java/com/example/demo/PostRepositoryTest.java
  • boot-data-mongo/src/test/java/com/example/demo/IntegrationTests.java
  • boot-data-mongo-querydsl/src/test/java/com/example/demo/PostControllerTests.java
  • boot-data-mongo/src/test/java/com/example/demo/PostControllerTests.java
  • boot-data-neo4j/src/test/java/com/example/demo/PostRepositoryWithNeo4jHarnessTest.java
🚧 Files skipped from review as they are similar to previous changes (1)
  • boot-data-couchbase/pom.xml

Comment thread boot-data-mongo-gridfs/mvnw.cmd
Comment thread boot-data-mongo-querydsl/src/test/java/com/example/demo/PostRepositoryTest.java Outdated
Comment thread boot-data-mongo/pom.xml
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
boot-exception-handler/src/test/java/com/example/demo/DemoApplicationTests.java (1)

27-31: ⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

Test failure: Security returns 401 instead of expected 404.

The pipeline shows this test fails because Spring Security intercepts the request and returns 401 UNAUTHORIZED instead of the expected 404 NOT_FOUND. This is likely due to Spring Boot 4's security auto-configuration behavior.

Add @WithMockUser to bypass authentication or configure security to permit unauthenticated access to test endpoints.

🐛 Proposed fix using `@WithMockUser`
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.webtestclient.autoconfigure.AutoConfigureWebTestClient;
 import org.springframework.context.ApplicationContext;
+import org.springframework.security.test.context.support.WithMockUser;
 import org.springframework.test.web.reactive.server.WebTestClient;

 `@AutoConfigureWebTestClient`
 `@SpringBootTest`
+@WithMockUser
 public class DemoApplicationTests {
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@boot-exception-handler/src/test/java/com/example/demo/DemoApplicationTests.java`
around lines 27 - 31, The test getNoneExistedPost_shouldReturn404 in
DemoApplicationTests is failing because Spring Security returns 401; add the
`@WithMockUser` annotation to the test (or test class) so the request runs as an
authenticated user and the controller can return 404; ensure you import
org.springframework.security.test.context.support.WithMockUser and apply it to
the getNoneExistedPost_shouldReturn404 method (or class) to bypass
authentication for this test.
🧹 Nitpick comments (1)
boot-data-mongo-tailable/pom.xml (1)

58-69: 💤 Low value

Consider adding explicit Lombok version in annotationProcessorPaths.

The Lombok annotation processor path is missing a <version> element. While this works when the version is inherited from the <dependencyManagement> section in the Spring Boot parent POM, explicitly specifying the version ensures consistency and makes the configuration self-documenting.

🔧 Suggested improvement
 <annotationProcessorPaths>
     <path>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
+        <version>${lombok.version}</version>
     </path>
 </annotationProcessorPaths>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@boot-data-mongo-tailable/pom.xml` around lines 58 - 69, The
maven-compiler-plugin's annotationProcessorPaths entry for Lombok is missing a
<version>, so update the maven-compiler-plugin configuration
(annotationProcessorPaths -> path with groupId org.projectlombok and artifactId
lombok) to include an explicit <version> (either a fixed version or a property
like ${lombok.version} that matches your Lombok dependency) so the annotation
processor version is explicit and consistent with the project's Lombok
dependency.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@boot-data-elasticsearch/src/test/java/com/example/demo/PostRepositoryWithTestContainersTest.java`:
- Around line 54-67: The test currently only decrements countDownLatch in
doOnComplete, and ignores the boolean result of countDownLatch.await, causing
setup to proceed on seed failures; update the reactive chain for the seed
operation (the stream that currently uses .doOnTerminate and .doOnComplete and
.subscribe) to ensure the latch is decremented on error/terminate too (e.g.,
move or add countDownLatch.countDown() into doOnTerminate or add doOnError),
then check the return value of countDownLatch.await(5000, MILLISECONDS) and if
it returns false throw an AssertionError or IllegalStateException to fail fast
so tests do not continue with unseeded state.

In `@boot-data-mongo-tailable/mvnw`:
- Around line 194-223: The script can silently continue when no downloader is
available (wget/curl skipped when MVNW_USERNAME is set and set_java_home fails);
add a final else branch after the existing wget/curl/elif set_java_home chain
that calls die with a clear error (e.g., "No download mechanism available:
install wget or curl, or ensure Java is available and set_java_home succeeds"
and include MVNW_USERNAME hint) so the failure is immediate; use the existing
die and verbose helpers and reference the set_java_home check and the
Downloader.java fallback in the error message to help locate the code.

In `@boot-data-mongo-tailable/mvnw.cmd`:
- Around line 116-121: The trap block that cleans up $TMP_DOWNLOAD_DIR should
rethrow the error to stop the script: inside the existing trap { ... } for the
script scope, after performing the Remove-Item cleanup and any warning handling,
add a break statement so the trap does not allow execution to continue (this
ensures the terminating error propagates and the script exits instead of
proceeding to emit MVN_CMD); locate the trap block and update it to perform
cleanup then break.

In `@boot-data-redis/mvnw`:
- Around line 194-223: When MVNW_USERNAME is set and both wget/curl are skipped,
the script can silently continue if set_java_home fails; update the if/elif/elif
... fi download block (the branches referencing MVNW_USERNAME, wget, curl,
set_java_home and the Downloader.java compile/run) to add a final else that
calls die with a clear download error when no downloader is available, and add
an explicit error check on the Java execution line that runs Downloader (the
"$(native_path "$JAVACMD")" -cp ... Downloader ...) so it ends with || die
"Failed to run Downloader.java" (ensure the javac compile line already has its
die).

In `@boot-data-redis/pom.xml`:
- Around line 54-58: Update the Maven dependency so the artifactId matches
Testcontainers’ actual artifact name: replace the current
<artifactId>testcontainers-junit-jupiter</artifactId> with
<artifactId>junit-jupiter</artifactId> under the existing <dependency> that has
<groupId>org.testcontainers</groupId> and <scope>test</scope>; keep the
dependency block intact so the Spring Boot dependency management (Boot 4.0.6 /
Testcontainers 2.0.5) can resolve the correct version.

---

Outside diff comments:
In
`@boot-exception-handler/src/test/java/com/example/demo/DemoApplicationTests.java`:
- Around line 27-31: The test getNoneExistedPost_shouldReturn404 in
DemoApplicationTests is failing because Spring Security returns 401; add the
`@WithMockUser` annotation to the test (or test class) so the request runs as an
authenticated user and the controller can return 404; ensure you import
org.springframework.security.test.context.support.WithMockUser and apply it to
the getNoneExistedPost_shouldReturn404 method (or class) to bypass
authentication for this test.

---

Nitpick comments:
In `@boot-data-mongo-tailable/pom.xml`:
- Around line 58-69: The maven-compiler-plugin's annotationProcessorPaths entry
for Lombok is missing a <version>, so update the maven-compiler-plugin
configuration (annotationProcessorPaths -> path with groupId org.projectlombok
and artifactId lombok) to include an explicit <version> (either a fixed version
or a property like ${lombok.version} that matches your Lombok dependency) so the
annotation processor version is explicit and consistent with the project's
Lombok dependency.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 860bd6d7-2ed9-4702-9f71-c2f443869173

📥 Commits

Reviewing files that changed from the base of the PR and between 8cb58a5 and b994541.

⛔ Files ignored due to path filters (3)
  • boot-data-mongo-tailable/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-data-redis/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-exception-handler/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
📒 Files selected for processing (29)
  • boot-data-elasticsearch/src/test/java/com/example/demo/ContainersConfig.java
  • boot-data-elasticsearch/src/test/java/com/example/demo/PostRepositoryWithTestContainersTest.java
  • boot-data-elasticsearch/src/test/java/com/example/demo/TestDemoApplication.java
  • boot-data-mongo-querydsl/src/test/java/com/example/demo/PostControllerTests.java
  • boot-data-mongo-querydsl/src/test/java/com/example/demo/PostRepositoryTest.java
  • boot-data-mongo-tailable/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-data-mongo-tailable/.mvn/wrapper/maven-wrapper.properties
  • boot-data-mongo-tailable/mvnw
  • boot-data-mongo-tailable/mvnw.cmd
  • boot-data-mongo-tailable/pom.xml
  • boot-data-mongo-tailable/src/main/resources/application.properties
  • boot-data-mongo-tailable/src/test/java/com/example/demo/RepositoryTests.java
  • boot-data-mongo/src/test/java/com/example/demo/MongodbContainerInitializer.java
  • boot-data-mongo/src/test/java/com/example/demo/PostRepositoryWithDynamicPropertiesTest.java
  • boot-data-redis/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-data-redis/.mvn/wrapper/maven-wrapper.properties
  • boot-data-redis/mvnw
  • boot-data-redis/mvnw.cmd
  • boot-data-redis/pom.xml
  • boot-data-redis/src/main/java/com/example/demo/DemoApplication.java
  • boot-data-redis/src/test/java/com/example/demo/DemoApplicationTests.java
  • boot-data-redis/src/test/java/com/example/demo/TestDemoApplication.java
  • boot-exception-handler/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-exception-handler/.mvn/wrapper/maven-wrapper.properties
  • boot-exception-handler/mvnw
  • boot-exception-handler/mvnw.cmd
  • boot-exception-handler/pom.xml
  • boot-exception-handler/src/main/resources/application.yml
  • boot-exception-handler/src/test/java/com/example/demo/DemoApplicationTests.java
💤 Files with no reviewable changes (3)
  • boot-data-mongo-tailable/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-exception-handler/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-data-redis/.mvn/wrapper/MavenWrapperDownloader.java
✅ Files skipped from review due to trivial changes (5)
  • boot-data-mongo-querydsl/src/test/java/com/example/demo/PostRepositoryTest.java
  • boot-data-redis/.mvn/wrapper/maven-wrapper.properties
  • boot-data-mongo-tailable/.mvn/wrapper/maven-wrapper.properties
  • boot-data-redis/src/test/java/com/example/demo/TestDemoApplication.java
  • boot-exception-handler/.mvn/wrapper/maven-wrapper.properties
🚧 Files skipped from review as they are similar to previous changes (2)
  • boot-data-mongo-querydsl/src/test/java/com/example/demo/PostControllerTests.java
  • boot-data-mongo/src/test/java/com/example/demo/MongodbContainerInitializer.java

Comment thread boot-data-mongo-tailable/mvnw
Comment thread boot-data-mongo-tailable/mvnw
Comment thread boot-data-mongo-tailable/mvnw.cmd
Comment thread boot-data-redis/mvnw
Comment thread boot-data-redis/pom.xml
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/boot-mvc-mustache.yml (1)

20-35: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Include this workflow in its own path filters.

This change updates the job behavior, but the workflow still only triggers for boot-mvc-mustache/**. A PR that changes only .github/workflows/boot-mvc-mustache.yml will skip this job, so the workflow can break unnoticed. Please add this workflow file, or .github/workflows/**, to both push.paths and pull_request.paths.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/boot-mvc-mustache.yml around lines 20 - 35, The workflow
.github/workflows/boot-mvc-mustache.yml currently limits triggers to
boot-mvc-mustache/** which will skip runs when only the workflow file is
changed; update the workflow triggers by adding push.paths and
pull_request.paths that include either the workflow file itself ("
.github/workflows/boot-mvc-mustache.yml") or the whole workflows directory ("
.github/workflows/**") so changes to the workflow will trigger CI; modify the
top-level trigger section in boot-mvc-mustache.yml to include both push.paths
and pull_request.paths entries.
🧹 Nitpick comments (9)
boot-groovy/pom.xml (1)

61-64: Align Groovy targetBytecode with project Java baseline.

Java version is set to 21 on line 24, but Groovy bytecode compiles to 17 on line 63. Aligning these versions eliminates avoidable compile/runtime inconsistencies in mixed Java/Groovy modules.

♻️ Proposed change
                 <configuration>
-                    <targetBytecode>17</targetBytecode>
+                    <targetBytecode>21</targetBytecode>
                 </configuration>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@boot-groovy/pom.xml` around lines 61 - 64, The Groovy compiler targetBytecode
is set to 17 while the project Java baseline is 21; update the Groovy plugin
configuration by changing the <targetBytecode> value from 17 to 21 so
Groovy-generated classes match the Java baseline (look for the <targetBytecode>
element in the Groovy plugin configuration near the plugin version 4.3.1 and
update it to 21).
boot-mvc-mustache/.mvn/wrapper/maven-wrapper.properties (1)

1-3: ⚡ Quick win

Pin the Maven distribution checksum while you’re rotating the wrapper.

only-script wrappers download Maven directly from distributionUrl, and Maven Wrapper supports distributionSha256Sum specifically to verify that archive before execution. Since this PR is already updating the wrapper metadata to Maven 3.9.15, add the Apache-published SHA-256 here as well so the bootstrap path is integrity-checked. (maven.apache.org)

Suggested change
 wrapperVersion=3.3.4
 distributionType=only-script
 distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.15/apache-maven-3.9.15-bin.zip
+distributionSha256Sum=<official sha256 for apache-maven-3.9.15-bin.zip>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@boot-mvc-mustache/.mvn/wrapper/maven-wrapper.properties` around lines 1 - 3,
The Maven wrapper metadata currently sets wrapperVersion, distributionType, and
distributionUrl but lacks the distributionSha256Sum integrity check; add a
distributionSha256Sum property to .mvn/wrapper/maven-wrapper.properties
(alongside wrapperVersion, distributionType, distributionUrl) containing the
official Apache-published SHA-256 for apache-maven-3.9.15-bin.zip (fetch from
the Apache Maven download/mirror or official checksums) so the wrapper verifies
the archive before execution.
boot-mongo/src/test/java/com/example/demo/MongodbContainerInitializer.java (1)

22-22: ⚡ Quick win

Use parameterized logging instead of string concatenation.

Line 22 uses string concatenation in the log statement, which incurs the cost of string building even when debug logging is disabled.

Suggested fix
-    log.debug("container.getFirstMappedPort():" + container.getFirstMappedPort());
+    log.debug("container.getFirstMappedPort(): {}", container.getFirstMappedPort());
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@boot-mongo/src/test/java/com/example/demo/MongodbContainerInitializer.java`
at line 22, The log statement uses string concatenation which eagerly builds the
message; change the call to use parameterized logging by passing a format
placeholder and the value instead (i.e., replace the concatenated call to
log.debug(...) that references container.getFirstMappedPort() with a
parameterized call like log.debug("container.getFirstMappedPort(): {}",
container.getFirstMappedPort()) so the message is only formatted when debug is
enabled).
boot-exception-handler/pom.xml (1)

86-91: 💤 Low value

Missing version for Lombok in annotation processor path.

The Lombok annotation processor path lacks a <version> element. While Maven may inherit it from the dependency management, explicitly specifying or using ${lombok.version} ensures consistent behavior across builds.

Suggested fix
 <annotationProcessorPaths>
     <path>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
+        <version>${lombok.version}</version>
     </path>
 </annotationProcessorPaths>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@boot-exception-handler/pom.xml` around lines 86 - 91, The
annotationProcessorPaths entry for Lombok in pom.xml is missing a <version>;
update the <path> for org.projectlombok:lombok inside annotationProcessorPaths
to include an explicit <version> (prefer using the project property
${lombok.version} or the concrete version used elsewhere) so the annotation
processor resolution is deterministic across builds; ensure the property
${lombok.version} is defined in the pom (or use the same version string already
declared for the lombok dependency).
boot-mongo/src/test/java/com/example/demo/ApplicationTests.java (1)

8-12: 💤 Low value

@AutoConfigureWebTestClient is redundant with manual binding.

The annotation auto-configures a WebTestClient bean, but the @BeforeEach method at lines 24-35 manually creates the client via WebTestClient.bindToController(controller), ignoring the auto-configured bean. Either:

  1. Remove @AutoConfigureWebTestClient since manual binding is used, or
  2. Use the auto-configured client by adding @Autowired to the WebTestClient field and removing the manual setup.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@boot-mongo/src/test/java/com/example/demo/ApplicationTests.java` around lines
8 - 12, The test currently has an unnecessary `@AutoConfigureWebTestClient` while
the `@BeforeEach` method in ApplicationTests manually creates the WebTestClient
via WebTestClient.bindToController(controller); remove the redundant
`@AutoConfigureWebTestClient` annotation OR alternatively stop manual binding: add
`@Autowired` to the WebTestClient field and delete the manual setup in the
`@BeforeEach` so the auto-configured client is used (refer to ApplicationTests,
the `@BeforeEach` setup and the WebTestClient field/controller).
boot-exception-handler/src/test/java/com/example/demo/ContainerConfig.java (1)

13-14: ⚡ Quick win

Avoid using mongo:latest for reproducible tests.

Using latest tag can cause test failures when the MongoDB image is updated with breaking changes. Pin to a specific version for reproducible builds.

Suggested fix
-        return new MongoDBContainer("mongo:latest");
+        return new MongoDBContainer("mongo:7.0");
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@boot-exception-handler/src/test/java/com/example/demo/ContainerConfig.java`
around lines 13 - 14, The mongoDBContainer() factory currently uses an unpinned
image ("mongo:latest") which can break reproducibility; update the
MongoDBContainer instantiation in ContainerConfig (method mongoDBContainer) to
use a specific, pinned image tag (e.g., "mongo:6.x.y") or a constant/config
property (e.g., MONGO_IMAGE) so tests always run against a fixed MongoDB version
and adjust any test config/environment docs accordingly.
boot-mongo/mvnw.cmd (1)

43-45: 💤 Low value

Unreachable code detected by static analysis.

Static analysis flags line 45 (@GOTO :EOF) as unreachable after exit /b 1 on line 44. This is technically correct but harmless—it's part of the standard Apache Maven Wrapper 3.3.4 script and serves as a defensive fallthrough that never executes.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@boot-mongo/mvnw.cmd` around lines 43 - 45, Static analysis reports `@GOTO` :EOF
as unreachable after the preceding "exit /b 1" in the Maven wrapper snippet
(lines containing "exit /b 1" and "@GOTO :EOF"); to keep the standard Apache
Maven Wrapper behavior, add a static-analysis suppression or linter-ignore
comment for this file (or for the specific rule) so the unreachable-code warning
is suppressed, or alternatively remove the redundant "@GOTO :EOF" if you prefer
to eliminate dead code; target the tokens "exit /b 1" and "@GOTO :EOF" when
applying the suppression or edit.
boot-mongo/pom.xml (1)

73-84: 💤 Low value

Consider adding Lombok version to annotationProcessorPaths.

The Lombok annotation processor path doesn't specify a version. While this may inherit from the Spring Boot BOM, explicit versioning can prevent build issues.

💡 Suggested improvement
 <annotationProcessorPaths>
     <path>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
+        <version>${lombok.version}</version>
     </path>
 </annotationProcessorPaths>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@boot-mongo/pom.xml` around lines 73 - 84, The maven-compiler-plugin's
annotationProcessorPaths entry for Lombok lacks an explicit version which can
cause build instability; update the <annotationProcessorPaths> <path> for
groupId org.projectlombok and artifactId lombok to include a concrete <version>
(or reference a project property like ${lombok.version}) so the annotation
processor resolution is deterministic, and ensure any declared property matches
your dependencyManagement/BOM if you choose that approach.
boot-mongo/src/test/java/com/example/demo/IntegrationTests.java (1)

11-25: ⚡ Quick win

Redundant @AutoConfigureWebTestClient with manual WebTestClient setup.

The @AutoConfigureWebTestClient annotation is added, but the test manually creates a WebTestClient via bindToServer() in setup(). This overrides the auto-configured bean, making the annotation ineffective.

Either inject the auto-configured client:

♻️ Option 1: Use auto-configured client
 `@AutoConfigureWebTestClient`
 `@SpringBootTest`(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
 public class IntegrationTests {
 
-  `@LocalServerPort`
-  int port;
-
-  WebTestClient client;
-
-  `@BeforeEach`
-  public void setup() {
-    this.client = WebTestClient.bindToServer()
-        .baseUrl("http://localhost:" + this.port)
-        .build();
-  }
+  `@Autowired`
+  WebTestClient client;

Or remove the annotation if manual setup is preferred.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@boot-mongo/src/test/java/com/example/demo/IntegrationTests.java` around lines
11 - 25, The class IntegrationTests currently uses `@AutoConfigureWebTestClient`
but then overrides it by manually creating a WebTestClient in setup() via
WebTestClient.bindToServer(); either remove the `@AutoConfigureWebTestClient`
annotation or switch to using the auto-configured bean by injecting the
WebTestClient (e.g., add an `@Autowired` WebTestClient client field and stop
building it in setup()), ensuring you update or remove the setup() method
accordingly so the auto-configured client is used when present.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@boot-exception-handler/pom.xml`:
- Around line 44-73: Update the incorrect org.testcontainers artifactIds by
replacing "testcontainers-junit-jupiter" with "junit-jupiter" and
"testcontainers-mongodb" with "mongodb" in the pom so the dependencies become
org.testcontainers:junit-jupiter and org.testcontainers:mongodb; keep the
existing groupId entries and test scope untouched and ensure no other artifactId
typos remain for testcontainers.

In `@boot-mongo/src/main/resources/application.properties`:
- Line 1: Replace the non-standard property key spring.mongodb.uri with the
Spring Data standard spring.data.mongodb.uri in application.properties so Spring
Boot 4 picks up the MongoDB connection; update any code or tests that reference
spring.mongodb.uri to use spring.data.mongodb.uri (search for occurrences of
spring.mongodb.uri) to keep configuration consistent with Spring Data MongoDB.

In `@boot-mvc-mustache/mvnw`:
- Around line 225-250: The Maven Wrapper now points to apache-maven-3.9.15 via
distributionUrl but lacks a distributionSha256Sum, so the checksum validation
block (in mvnw) never runs; open maven-wrapper.properties and add a
distributionSha256Sum entry set to the official SHA-256 for
apache-maven-3.9.15-bin.zip (copy the checksum from repo.maven.apache.org for
that artifact) so the validation logic that checks distributionSha256Sum against
the downloaded file will run and fail-fast if the checksum doesn't match.

In `@boot-mvc-mustache/pom.xml`:
- Around line 42-49: The POM currently uses non-existent test coordinates
spring-boot-starter-webflux-test and spring-boot-starter-mustache-test; replace
those two <artifactId> entries with the published spring-boot-starter-test
(scope test) and, if you need Reactor-specific tooling, add reactor-test
(org.springframework.boot:spring-boot-starter-test and
io.projectreactor:reactor-test) as test-scope dependencies so the build can
resolve tests; update/remove the old artifactId entries in the dependency block
accordingly.

In `@boot-mvc-mustache/src/main/resources/application.yml`:
- Around line 9-10: The YAML uses nonstandard MongoDB property names; change
`spring.mongodb.uri` to `spring.data.mongodb.uri` and `gridfs.database` (or
`grid-fs-database`) to the Spring Boot 4 expected
`spring.data.mongodb.gridfs.database` (or align naming with other modules using
`grid-fs-database`) so configuration binding works; update the entries that
reference `spring.mongodb.uri`, `gridfs.database`, and any equivalent keys to
`spring.data.mongodb.uri` and `spring.data.mongodb.gridfs.database` respectively
to match Spring Data MongoDB conventions.

---

Outside diff comments:
In @.github/workflows/boot-mvc-mustache.yml:
- Around line 20-35: The workflow .github/workflows/boot-mvc-mustache.yml
currently limits triggers to boot-mvc-mustache/** which will skip runs when only
the workflow file is changed; update the workflow triggers by adding push.paths
and pull_request.paths that include either the workflow file itself ("
.github/workflows/boot-mvc-mustache.yml") or the whole workflows directory ("
.github/workflows/**") so changes to the workflow will trigger CI; modify the
top-level trigger section in boot-mvc-mustache.yml to include both push.paths
and pull_request.paths entries.

---

Nitpick comments:
In `@boot-exception-handler/pom.xml`:
- Around line 86-91: The annotationProcessorPaths entry for Lombok in pom.xml is
missing a <version>; update the <path> for org.projectlombok:lombok inside
annotationProcessorPaths to include an explicit <version> (prefer using the
project property ${lombok.version} or the concrete version used elsewhere) so
the annotation processor resolution is deterministic across builds; ensure the
property ${lombok.version} is defined in the pom (or use the same version string
already declared for the lombok dependency).

In `@boot-exception-handler/src/test/java/com/example/demo/ContainerConfig.java`:
- Around line 13-14: The mongoDBContainer() factory currently uses an unpinned
image ("mongo:latest") which can break reproducibility; update the
MongoDBContainer instantiation in ContainerConfig (method mongoDBContainer) to
use a specific, pinned image tag (e.g., "mongo:6.x.y") or a constant/config
property (e.g., MONGO_IMAGE) so tests always run against a fixed MongoDB version
and adjust any test config/environment docs accordingly.

In `@boot-groovy/pom.xml`:
- Around line 61-64: The Groovy compiler targetBytecode is set to 17 while the
project Java baseline is 21; update the Groovy plugin configuration by changing
the <targetBytecode> value from 17 to 21 so Groovy-generated classes match the
Java baseline (look for the <targetBytecode> element in the Groovy plugin
configuration near the plugin version 4.3.1 and update it to 21).

In `@boot-mongo/mvnw.cmd`:
- Around line 43-45: Static analysis reports `@GOTO` :EOF as unreachable after the
preceding "exit /b 1" in the Maven wrapper snippet (lines containing "exit /b 1"
and "@GOTO :EOF"); to keep the standard Apache Maven Wrapper behavior, add a
static-analysis suppression or linter-ignore comment for this file (or for the
specific rule) so the unreachable-code warning is suppressed, or alternatively
remove the redundant "@GOTO :EOF" if you prefer to eliminate dead code; target
the tokens "exit /b 1" and "@GOTO :EOF" when applying the suppression or edit.

In `@boot-mongo/pom.xml`:
- Around line 73-84: The maven-compiler-plugin's annotationProcessorPaths entry
for Lombok lacks an explicit version which can cause build instability; update
the <annotationProcessorPaths> <path> for groupId org.projectlombok and
artifactId lombok to include a concrete <version> (or reference a project
property like ${lombok.version}) so the annotation processor resolution is
deterministic, and ensure any declared property matches your
dependencyManagement/BOM if you choose that approach.

In `@boot-mongo/src/test/java/com/example/demo/ApplicationTests.java`:
- Around line 8-12: The test currently has an unnecessary
`@AutoConfigureWebTestClient` while the `@BeforeEach` method in ApplicationTests
manually creates the WebTestClient via
WebTestClient.bindToController(controller); remove the redundant
`@AutoConfigureWebTestClient` annotation OR alternatively stop manual binding: add
`@Autowired` to the WebTestClient field and delete the manual setup in the
`@BeforeEach` so the auto-configured client is used (refer to ApplicationTests,
the `@BeforeEach` setup and the WebTestClient field/controller).

In `@boot-mongo/src/test/java/com/example/demo/IntegrationTests.java`:
- Around line 11-25: The class IntegrationTests currently uses
`@AutoConfigureWebTestClient` but then overrides it by manually creating a
WebTestClient in setup() via WebTestClient.bindToServer(); either remove the
`@AutoConfigureWebTestClient` annotation or switch to using the auto-configured
bean by injecting the WebTestClient (e.g., add an `@Autowired` WebTestClient
client field and stop building it in setup()), ensuring you update or remove the
setup() method accordingly so the auto-configured client is used when present.

In `@boot-mongo/src/test/java/com/example/demo/MongodbContainerInitializer.java`:
- Line 22: The log statement uses string concatenation which eagerly builds the
message; change the call to use parameterized logging by passing a format
placeholder and the value instead (i.e., replace the concatenated call to
log.debug(...) that references container.getFirstMappedPort() with a
parameterized call like log.debug("container.getFirstMappedPort(): {}",
container.getFirstMappedPort()) so the message is only formatted when debug is
enabled).

In `@boot-mvc-mustache/.mvn/wrapper/maven-wrapper.properties`:
- Around line 1-3: The Maven wrapper metadata currently sets wrapperVersion,
distributionType, and distributionUrl but lacks the distributionSha256Sum
integrity check; add a distributionSha256Sum property to
.mvn/wrapper/maven-wrapper.properties (alongside wrapperVersion,
distributionType, distributionUrl) containing the official Apache-published
SHA-256 for apache-maven-3.9.15-bin.zip (fetch from the Apache Maven
download/mirror or official checksums) so the wrapper verifies the archive
before execution.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 4592b959-1387-483b-a437-8c6f058fbbc5

📥 Commits

Reviewing files that changed from the base of the PR and between b994541 and 8715149.

⛔ Files ignored due to path filters (4)
  • boot-groovy/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-kotlin/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-mongo/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • boot-mvc-mustache/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
📒 Files selected for processing (42)
  • .github/workflows/boot-data-cassandra.yml
  • .github/workflows/boot-data-elasticsearch.yml
  • .github/workflows/boot-data-neo4j.yml
  • .github/workflows/boot-exception-handler.yml
  • .github/workflows/boot-mvc-mustache.yml
  • boot-data-elasticsearch/src/test/java/com/example/demo/PostRepositoryWithTestContainersTest.java
  • boot-data-neo4j/pom.xml
  • boot-data-neo4j/src/test/java/com/example/demo/PostRepositoryWithNeo4jHarnessTest.java
  • boot-exception-handler/pom.xml
  • boot-exception-handler/src/main/java/com/example/demo/DemoApplication.java
  • boot-exception-handler/src/test/java/com/example/demo/ContainerConfig.java
  • boot-exception-handler/src/test/java/com/example/demo/DemoApplicationTests.java
  • boot-groovy/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-groovy/.mvn/wrapper/maven-wrapper.properties
  • boot-groovy/mvnw
  • boot-groovy/mvnw.cmd
  • boot-groovy/pom.xml
  • boot-groovy/src/main/resources/application.yml
  • boot-groovy/src/test/groovy/com/example/demo/ApplicationTests.groovy
  • boot-groovy/src/test/groovy/com/example/demo/IntegrationTests.groovy
  • boot-kotlin/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-kotlin/.mvn/wrapper/maven-wrapper.properties
  • boot-kotlin/mvnw
  • boot-kotlin/mvnw.cmd
  • boot-mongo/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-mongo/.mvn/wrapper/maven-wrapper.properties
  • boot-mongo/mvnw
  • boot-mongo/mvnw.cmd
  • boot-mongo/pom.xml
  • boot-mongo/src/main/resources/application.properties
  • boot-mongo/src/test/java/com/example/demo/ApplicationTests.java
  • boot-mongo/src/test/java/com/example/demo/IntegrationTests.java
  • boot-mongo/src/test/java/com/example/demo/MongodbContainerInitializer.java
  • boot-mongo/src/test/java/com/example/demo/PostControllerTests.java
  • boot-mongo/src/test/java/com/example/demo/PostRepositoryPageableTest.java
  • boot-mongo/src/test/java/com/example/demo/PostRepositoryTest.java
  • boot-mvc-mustache/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-mvc-mustache/.mvn/wrapper/maven-wrapper.properties
  • boot-mvc-mustache/mvnw
  • boot-mvc-mustache/mvnw.cmd
  • boot-mvc-mustache/pom.xml
  • boot-mvc-mustache/src/main/resources/application.yml
💤 Files with no reviewable changes (4)
  • boot-mvc-mustache/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-mongo/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-groovy/.mvn/wrapper/MavenWrapperDownloader.java
  • boot-kotlin/.mvn/wrapper/MavenWrapperDownloader.java
✅ Files skipped from review due to trivial changes (2)
  • boot-mongo/src/test/java/com/example/demo/PostRepositoryPageableTest.java
  • boot-groovy/.mvn/wrapper/maven-wrapper.properties
🚧 Files skipped from review as they are similar to previous changes (1)
  • boot-data-neo4j/src/test/java/com/example/demo/PostRepositoryWithNeo4jHarnessTest.java

Comment thread boot-exception-handler/pom.xml
Comment thread boot-mongo/src/main/resources/application.properties
Comment thread boot-mvc-mustache/mvnw
Comment thread boot-mvc-mustache/pom.xml
Comment thread boot-mvc-mustache/src/main/resources/application.yml
@rajadilipkolli rajadilipkolli merged commit a3c5a6e into master May 5, 2026
33 of 34 checks passed
@rajadilipkolli rajadilipkolli deleted the SB4 branch May 5, 2026 18:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant