What Is New in Spring Boot 3.3
Spring Boot 3.3 delivers incremental improvements focused on developer experience, enhanced integrations, and keeping dependencies current. This release builds on the solid foundation of 3.x with quality-of-life upgrades rather than massive shifts.
| Category | Key Changes |
|---|---|
| New Features | Docker Compose lifecycle management, Testcontainers at development time, Graceful shutdown for Jetty |
| Improvements | Enhanced DevTools, RestClient builder support, Updated Spring Boot Docker image |
| Dependency Updates | Spring Framework 6.1, Groovy 4, Kotlin 1.9, Jackson 2.16, Tomcat 10.1, Jetty 12 |
| Deprecations | JMX-specific 'spring.jmx.' properties, Spring Boot Docker image publishing |
How does Docker Compose integration improve the development workflow?
Spring Boot 3.3 can automatically manage your Docker Compose lifecycle. This means you define your dependencies like PostgreSQL or Redis in a compose.yaml file, and Spring Boot will start them when your application runs and shut them down when it stops.
In practice, this eliminates the need to manually run docker-compose up in a separate terminal. It just works, making the inner-loop development experience much smoother. You can control this behavior with the spring.docker.compose properties if you need to skip it for certain environments.
What enhancements were made for testing with Testcontainers?
This release introduces development-time Testcontainers support. By annotating a @TestConfiguration with @ImportDevTools, the containers you define will be started automatically during development, not just during tests.
This is a game-changer for integration testing. It allows your local development environment to closely mirror your test and production environments without complex setup scripts. The containers stay running across application restarts managed by DevTools, saving significant time.
Is there a better way to build a RestClient now?
Yes, Spring Boot 3.3 adds support for creating a RestClient bean using a builder. You can now inject a RestClient.Builder and customize it with custom interceptors, message converters, or a base URL.
This provides a more modern and flexible alternative to the older RestTemplate. The builder pattern gives you fine-grained control over the client's configuration while still benefiting from Spring Boot's auto-configuration.
What's new with the Spring Boot Docker image?
The official Spring Boot Docker image has been updated with a new base and a new entrypoint structure. The new entrypoint offers much more flexibility, allowing you to easily run your application as a standard Java app or in an exploded form.
This matters because it simplifies your Dockerfiles. You can now leverage the entrypoint's logic to handle Java parameter passing more effectively. Note that the publishing of these images to Docker Hub is now deprecated in favor of using the Gradle or Maven plugins to build images.
How was graceful shutdown improved for Jetty?
Jetty now supports the graceful shutdown feature that was already available for Tomcat and Undertow. When enabled, the web server will stop accepting new requests and wait for ongoing requests to complete before shutting down during a graceful exit.
This ensures zero-downtime deployments and cleaner releases when using Jetty as your embedded server. You can configure the wait period with the existing server.shutdown property, making the behavior consistent across all supported servlet containers.
FAQ
Do I need to rewrite my application to use Spring Boot 3.3?
No, this is a minor release. You should be able to upgrade from Spring Boot 3.x by just updating the version in your build file. Always check the release notes for any deprecated features you might be using.
Can I use the new Docker Compose feature in production?
It's designed primarily for development to streamline your local experience. For production, you'd typically use a dedicated orchestration tool like Kubernetes.
What happened to the JMX properties that were deprecated?
The JMX-specific 'spring.jmx.' properties are now deprecated in favor of the general 'spring.application.admin.' properties. Your old configuration will still work but you should plan to migrate.
How do I build Docker images now that the publishing is deprecated?
You should use the Spring Boot Maven or Gradle plugins (spring-boot:build-image or bootBuildImage) to build your images. These plugins use Cloud Native Buildpacks and are the recommended approach.
Is Java 21 required for Spring Boot 3.3?
No, Spring Boot 3.3 still supports Java 17 and above. Java 21 is fully supported and recommended for new projects, but you are not forced to upgrade from Java 17.