= Spring Boot 3.3.0-M3 Release Notes

For changes in earlier milestones, please refer to:

- link:Spring-Boot-3.3.0-M2-Release-Notes[v3.3.0-M2]
- link:Spring-Boot-3.3.0-M1-Release-Notes[v3.3.0-M1]



== Upgrading from Spring Boot 3.2



=== Minimum Requirements Changes

None.



=== Prometheus Metrics

To use Spring Boot's auto-configuration of Micrometer's Prometheus support, replace your dependency on `micrometer-registry-prometheus` with a dependency on `micrometer-registry-prometheus-simpleclient`.

`micrometer-registry-prometheus-simpleclient` is a new module in Micrometer 1.13. It contains Micrometer's existing support for Prometheus and uses the 0.16.x generation of the https://github.com/prometheus/client_java[Prometheus Java Client].
The existing `micrometer-registry-prometheus` module now provides support for the 1.x generation of the Prometheus Java Client and is not yet supported by Spring Boot.



=== Flyway 10

This release upgrades to Flyway 10.10.
Flyway 10 is more modular than previous versions and support for several databases has been moved into a number of new, database-specific modules.
If you are using any of the following databases, update your dependencies accordingly:

- DB2 (`flyway-database-db2`)
- Derby (`flyway-database-derby`)
- HSQLDB (`flyway-database-hsqldb`)
- Informix (`flyway-database-informix`)
- PostgreSQL (`flyway-database-postgresql`)
- Redshift (`flyway-database-redshift`)
- SAP HANA (`flyway-database-saphana`)
- Snowflake (`flyway-database-snowflake`)
- Sybase ASE (`flyway-database-sybasease`)



=== Infinispan 15

This release upgrades to Infinispan 15.
Infinispan 15 has raised its Jakarta EE baseline and, as such, a number of its `-jakarta` modules, such as `infinispan-core-jakarta`, no longer exist. Use their standard alternatives, such as `infinispan-core`, instead.



=== Git Commit ID Maven Plugin

The plugin has been upgraded to 8.0.x.
As part of this upgrade, the default date format is now `yyyy-MM-dd'T'HH:mm:ssXXX`.
This provides compatibility with Maven's reproducible builds feature.



== New and Noteworthy

TIP: Check link:Spring-Boot-3.3.0-M3-Configuration-Changelog[the configuration changelog] for a complete overview of the changes in configuration.



=== CDS Support

https://docs.spring.io/spring-framework/reference/integration/cds.html[CDS] is a JVM feature that can help reduce the startup time and memory footprint of Java applications. Spring Boot now has support for easy creation of a CDS friendly layout. This layout can be created by  extracting the uber JAR with the help of the `tools` jarmode:

```
java -Djarmode=tools -jar your-application.jar extract
```

This creates a `your-application/your-application.jar` and the needed libraries in a `your-application/lib` folder. The application can then be executed with `java -jar your-application/your-application.jar`.

The `tools` jarmode supports two commands at the moment:

* `extract`, as shown above. This supersedes `-Djarmode=layertools extract`.
* `list-layers`, which supersedes `-Djarmode=layertools list-layers`.

Run

```
java -Djarmode=tools -jar your-application.jar help <command>
```

to get more details.

If you have used `layers.enabled = false` in your Gradle build file or `<layers><enabled>false</enabled></layers>` in your Maven `pom.xml`, please note that disabling layers no longer prevents the inclusion of the jarmode JAR. Use `includeTools` on the `BootJar` or `BootWar` task or `<configuration><includeTools>false</includeTools></configuration>` on the `spring-boot-maven-plugin` for that.



=== Virtual Threads

The virtual threads support for Undertow has been reverted, as it leaks memory. See https://github.com/spring-projects/spring-boot/issues/39812[#39812] for details.



=== Base64 Resources

Resources can now be loaded as Base64 encoded text values using a `base64:` prefix. 
This can be useful with resources such as SSL certificates, as in this example: 

```
spring:
  ssl:
    bundle:
      pem:
        mybundle:
          keystore:
            certificate: "base64:LS0tLS1CRUdJTi..."
            private-key: "base64:QmFnIEF0dHJpYn..."
```



=== SBOM Actuator Endpoint

The `spring-boot-actuator` module now includes a new SBOM endpoint.
By default the endpoint will server `META-INF/sbom/bom.json` or `META-INF/sbom/application.cdx.json` files located in your jar.

Additional configuration has also been provided in the `spring-boot-parent-starter` POM to make SBOM plugins easier to configure.

More documentation on the feature will be added in our RC1 release.



=== Documentation Updates

The Spring Boot documentation in the process of being migrated to Antora.
When complete, this will provide more structure as well as better search capabilities.

Currently documentation for Spring Boot 3.3.0-M3 has not been published.
We hope to do so soon, but in the meantime please use the 3.3.0-SNAPSHOT documentation links.



=== Dependency Upgrades
Spring Boot 3.3.0-M3 moves to new versions of several Spring projects:

* https://github.com/spring-projects/spring-authorization-server/releases/tag/1.3.0-M3[Spring Authorization Server 1.3.0-M3]
* https://github.com/spring-projects/spring-data-bom/releases/tag/2024.0.0-M2[Spring Data Bom 2024.0.0-M2]
* https://github.com/spring-projects/spring-hateoas/releases/tag/2.3.0-M1[Spring HATEOAS 2.3.0-M1]
* https://github.com/spring-projects/spring-integration/releases/tag/v6.3.0-M2[Spring Integration 6.3.0-M2]
* https://github.com/spring-projects/spring-kafka/releases/tag/v3.2.0-M2[Spring Kafka 3.2.0-M2]
* https://github.com/spring-projects/spring-pulsar/releases/tag/v1.1.0-M2[Spring Pulsar 1.1.0-M2]
* https://github.com/spring-projects/spring-security/releases/tag/6.3.0-M3[Spring Security 6.3.0-M3]
* https://github.com/spring-projects/spring-session/releases/tag/3.3.0-M3[Spring Session 3.3.0-M3]

Numerous third-party dependencies have also been updated, some of the more noteworthy of which are the following:

* https://commons.apache.org/proper/commons-dbcp/changes-report.html#a2.12.0[Commons DBCP2 2.12]
* https://www.elastic.co/guide/en/elasticsearch/reference/8.12/es-release-notes.html[Elasticsearch Client 8.12]
* https://documentation.red-gate.com/flyway/release-notes-and-older-versions/release-notes-for-flyway-engine[Flyway 10.10]
* https://infinispan.org/blog/2024/03/13/infinispan-15[Infinispan 15.0]
* https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.17[Jackson 2.17]
* https://downloads.apache.org/kafka/3.7.0/RELEASE_NOTES.html[Kafka 3.7]
* https://github.com/micrometer-metrics/micrometer/releases/tag/v1.13.0-M2[Micrometer 1.13.0-M2]
* https://github.com/micrometer-metrics/micrometer-tracing/releases/tag/v1.3.0-M2[Micrometer Tracing 1.3.0-M2]
* https://github.com/mockito/mockito/releases/tag/v5.11.0[Mockito 5.11]
* https://github.com/open-telemetry/opentelemetry-java/releases/tag/v1.36.0[OpenTelemetry 1.36]




=== Miscellaneous
Apart from the changes listed above, there have also been lots of minor tweaks and improvements including:

* `jakarta.inject:jakarta.inject-api` is now included in Spring Boot's dependency management.
* The date format of the `git-commit-id-maven-plugin` has been changed to `yyyy-MM-dd'T'HH:mm:ssXXX` to allow reproducible builds. See https://github.com/spring-projects/spring-boot/pull/39606[#39606] for details.
* The `spring-boot-starter-jetty` no longer includes `jetty-jndi` by default. If you need JNDI support, please add `org.eclipse.jetty:jetty-jndi` to your dependencies.
* On Windows it's now possible to start the application with `mvn spring-boot:run` even if it has a gazillion dependencies. Before 3.3.0 it would fail with a "The filename or extension is too long" exception.



== Deprecations in Spring Boot 3.3.0-M3

* `-Djarmode=layertools extract` in favor of `-Djarmode=tools extract --layers`
* `-Djarmode=layertools list` in favor of `-Djarmode=tools list-layers`
* `layers.includeLayerTools` on the `BootJar` and `BootWar` task in favor of `includeTools`.
* `<layers><enabled>...</enabled></layers>` in favor of `<includeTools>...</includeTools>`