:reference-docs: https://docs.spring.io/spring-boot/3.4-SNAPSHOT/reference
:maven-docs: https://docs.spring.io/spring-boot/3.4-SNAPSHOT/maven-plugin
:gradle-docs: https://docs.spring.io/spring-boot/3.4-SNAPSHOT/gradle-plugin

= Spring Boot 3.4.0-M3 Release Notes

For changes in earlier milestones, please refer to:

- link:Spring-Boot-3.4.0-M2-Release-Notes[v3.4.0-M2]
- link:Spring-Boot-3.4.0-M1-Release-Notes[v3.4.0-M1]



== Upgrading from Spring Boot 3.3



=== Minimum Requirements Changes
None.



=== @AutoConfigureTestDatabase with Containers
The `@AutoConfigureTestDatabase` annotation now attempts to detect if a database has been sourced from a container.
This should remove the need to add `replace=Replace.NONE` if you want to use the annotation with container databases.

If you need to revert to the old behavior, set `replace=Replace.AUTO_CONFIGURED` on the annotation.



=== Graceful Shutdown
Graceful shutdown of the embedded web server (Jetty, Rector Netty, Tomcat, or Undertow) is now enabled by default.
If you need to restore the previous behavior, set `server.shutdown` to `immediate`.



== New and Noteworthy
TIP: Check link:Spring-Boot-3.4.0-M3-Configuration-Changelog[the configuration changelog] for a complete overview of the changes in configuration.


=== Embedded Broker support with ActiveMQ Classic
Now that ActiveMQ Classic supports an embedded broker again, the auto-configuration has been updated to support it.

Note that contrary to Spring Boot 2.7.x, the ActiveMQ starter is client only. To use the embedded broker, `org.apache.activemq:activemq-broker` should be added to your application.



=== Spring for Apache Pulsar
A new `PulsarContainerFactoryCustomizer` interface has been added to support customization of the auto-configured `PulsarContainerFactory`.

The `spring.pulsar.consumer.subscription.name` configuration property now applies to the auto-configured Pulsar listener container.

Two new configuration properties for configuring the Pulsar client's concurrency have been introduced:
- `spring.pulsar.client.threads.io` controls the number of threads to be used for handling connections to brokers.
- `spring.pulsar.client.threads.listener` controls the number of threads to be used for message listeners.

Lastly, the new `spring.pulsar.listener.concurrency` property can be used to control the concurrency of the auto-configured Pulsar message listener container.



=== Observability
It's now possible to send OTLP spans over the gRPC transport. For this, set the new configuration property `management.otlp.tracing.transport` to `grpc`. This property defaults to `http`. Service connection support for this has been added, too.

Docker Compose and Testcontainers support has been added for OTLP logging.

Structured logging now supports Graylog Extended Log Format (GELF).



=== Deprecating and Replacing Auto-configuration Classes
To make it easier to evolve auto-configuration, support for deprecating and replacing auto-configuration classes has been introduced.
Replacements can be declared in a new `META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.replacements` file.
To learn more, please refer to the {reference-docs}/features/developing-auto-configuration.html#features.developing-auto-configuration.locating-auto-configuration-candidates.deprecating[reference documentation].



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

* Spring AMQP 3.2.0-M3
* Spring Authorization Server 1.4.0-M2
* Spring Batch 5.2.0-M1
* Spring Data 2024.1.0-M1
* Spring Framework 6.2.0-RC1
* Spring HATEOAS 2.4.0-RC1
* Spring Kafka 3.3.0-M3
* Spring Integration 6.4.0-M3
* Spring Pulsar 1.2.0-M2
* Spring Security 6.4.0-M4


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

* Artemis 2.37
* Elasticsearch Client 8.15
* Jedis 5.1
* Flyway 10.18
* Lettuce 6.4
* Log4j 2.24
* Micrometer 1.14.0-M3
* Micrometer Tracing 1.4.0-M3
* Mockito 5.13
* OpenTelemetry 1.42
* R2DBC MySQL 1.3
* Rabbit AMQP Client 5.22
* Reactor 2024.0.0-M6
* Selenium 4.24




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

* A new configuration property, `spring.data.web.pageable.serialization-mode`, for configuring Spring Data Web's serialization mode has been added.
* When using the `SpringApplication.from(...)` syntax, it's now possible to specify the additional profiles to activate.
* The Spring Boot plugin no longer sets `BP_NATIVE_IMAGE: true` in the buildpack environment.
* Registered `@ConfigurationProperties` beans now respect `@DependsOn`, `@Description`, `@Fallback`, `@Lazy`, `@Primary`, `@Scope` and `@Role` annotations.
* Grafana LGTM support has been added to `OtlpLoggingConnectionDetails` for Testcontainer and Docker Compose
* Log4j2's `MultiFormatStringBuilderFormattable` is now supported in structured logging
* Support for Testcontainer's `RedisContainer` has been added
* A new configuration property, `spring.jms.listener.max-messages-per-task`, for configuring the maximum number of messages a listener processes in one task has been added.
* The default security configuration now exposes health groups mapped to additional paths. In addition, both `EndpointRequest` classes now offer `toAdditionalPaths(...)` methods.


== Deprecations in Spring Boot 3.4.0-M3

* Deprecated `org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpTracingConnectionDetails#getUrl()` in favor of `getUrl(Transport)`
* Deprecated `org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryAutoConfiguration` in favor of `org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryTracingAutoConfiguration`
