⭐ New Features
- Enforce REQUIRES_NEW for correct transaction configuration on transactional event listeners #31414
- TestCompiler should allow to configure the Locale that renders compiler messages #31408
- Consistent Object result declarations for JdbcClient's
ResultQuerySpec
#31403 - Move
ReactorResourceFactory
toorg.springframework.http.client
package #31399 - Prevent message resolution after context close #31397
- Handle STOMP messages to user destination in order #31395
- AOT bean registrations miss reflection hints on property fields #31390
- Support Jackson's DatatypeFeature in Jackson2ObjectMapperBuilder #31380
- Allow Filters to be initialized when they're added to MockMvc #31362
- Use schema-based config in sql-error-codes.xml #31354
- Optimize uses of
onErrorResume()
#31352 - AOT bean registrations miss reflection hints on interfaces #31350
SimpleAsyncTaskScheduler
should run fixed-delay tasks on scheduler thread #31334- Allow custom observation convention for
RestClient
#31325 - MockMvcHttpClientConnector support for RequestPostProcessor hook #31298
- Expose
shouldHandle(ApplicationEvent)
inApplicationListenerMethodAdapter
#31295 - Make
ReactorNettyClientRequestFactory
lifecycle-aware #31281 - Add a constructor with externally managed Reactor Netty resources to
ReactorNettyClientRequestFactory
#31280 - Consistent
CannotAcquireLockException
translation for PostgreSQL serialization failure behind JPA #31274 - Simplify
ServerRequestExtensions.queryParamOrNull()
#31264 - Reduce nested class lookups in ClassUtils #31258
- Print JVM restoration time in
DefaultLifecycleProcessor
#31252 - ValueLoaderEntryProcessor should not be created for every call to JCacheCache#get #31250
- Introduce
initialize()
method inAbstractRoutingDataSource
andAbstractRoutingConnectionFactory
#31248 - Add
MappingJackson2MessageConverter
constructors that accept anObjectMapper
#31234 - Eliminate synchronized block to avoid thread pinning in SingletonSupplier #31227
- Add OuputStream BodyInserter #31184
- SseEmitter should format a multiline String #30965
- Suppress logging from HandlerMapping when used for Spring Security's mvcRequestMatcher #30349
- Lenient handling of unencoded URIs in ForwardedHeaderTransformer #30137
- Support DispatcherType.INCLUDE in DefaultServletHttpRequestHandler #30113
- Introduce caching for functional routing #29985
- Log
CglibAopProxy
errors asWARN
instead ofINFO
#29773 - Add CharBufferDecoder #29741
- Provide the HttpRequest on the ClientResponse interface #28397
- Batch update return generated keys #28132
- Allow filters to be registered with MockMvc for particular dispatcher types #27717
- Introduce class-level execution phases for
@Sql
#27285 - Add default methods to
MailSender
andJavaMailSender
as appropriate #23651 - Remove all ApplicationListenerMethodAdapters on context close [SPR-17456] #21988
- Handle STOMP messages from client session in order #21798
- Call
Lifecycle.stop()
for already started beans on failed refresh [SPR-15468] #20028
🐞 Bug Fixes
- Fix regression in JmsAccessor#setSessionAcknowledgeMode #31328
JdbcClient
does not updateKeyHolder
when using positional parameters #31297- AOT bean registrations miss reflection hints on public methods #31293
- DefaultFetchSpec should not buffer results in temporary list buffers #31282
- Missing reflection hint on Publisher for bean destroy methods support #31278
- Missing reflection hint on Eclipse FileLocator #31271
- Missing resource hint for spring.properties #31270
- Missing reflection hints on Kotlin classes for KotlinDetector #31269
- Missing reflection hint on MonetaryAmount in conversion service #31266
- Missing reflection hints for jakarta.inject classes #31259
- ResponseBodyEmitter ignores calls to complete but remains open after JSON write error while sending #30687
- The task in AsyncTaskExecutor throws an exception before execution, and ControllerAdvice will be called twice. #30232
- Suppress deprecation warning for AOT-generated code that refers to a deprecated member #29597
- Avoid duplicate
ApplicationListener
firing (proxy vs. target) #28322 - JCacheCache#putIfAbsent is not atomic #21591
📔 Documentation
- Add Search in all Spring Docs #31290
- Add missing period in RestClient documentation #31237
- Improve wording in Javadoc for
@Autowired
#31235 - Clarify
ClientHttpRequestInterceptor#intercept()
must close response if it throws exception after receiving the response #29751 - Create migration guide from RestTemplate to RestClient #23269
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
@JakobFels, @OnlyWick, @StellarStrategist, @aahlenst, @alidandach, @bergander, @bramhaag, @chaewon121, @ctailor2, @e-freni, @esperar, @ghainesii, @hpoettker, @izeye, @joakimmohn, @kang-hl, @kriegaex, @kzander91, @markusheiden, @mdeinum, @qpakzk, @quaff, @ralph-riedel, @runeflobakk, @rwinch, @sephiroth-j, @shin-mallang, @violetbeach, and @vpavic