⭐ New Features
- Optimize ContentCachingRequestWrapper allocation for known request size #31834
- Inherit parent context in
coRouter
DSL #31831 - Declare
isStatic
andreleaseTarget
as default methods onTargetSource
#31820 - Delegation support for JDBC 4.3 ConnectionBuilder and ShardingKeyBuilder #31795
- Support for a read-only DataSource in LazyConnectionDataSourceProxy #31785
- Add
MySQLIdentityColumnMaxValueIncrementer
#31784 - Introduce overloaded
MockPart
constructor that accepts theContent-Type
#31757 - Introduce
toString(Charset)
inFastByteArrayOutputStream
#31737 - Avoid byte array copy in getContentAsString #31731
- Improve "active" metrics handling in WebClient observations #31702
- Make ResourceArrayPropertyEditor supports comma delimited location patterns #31700
- Consistently log exceptions from
TestExecutionListener
s atWARN
level #31688 - Document need for
-parameters
flag in exception messages #31675 - Improve
@RegisterReflectionForBinding
for enums #31570 - Support direct shard database operation routing in Spring JDBC #31506
- Log test aborted/skipped exceptions at INFO level in the TestContext framework #31479
- Avoid double proxying for
@Resource
@Lazy
fallback autowiring #31447 - Add support for tuning the code generation for bean property values #31427
- Avoid race condition in ConcurrentReferenceHashMap #31008
- Allow functional bean registration to set bean order (equivalent to
@Order
) #30849 - Allow AOT generated classes to be excluded from code analyzer tools #30824
- Error page does not utilize forwarded prefix #30828
- Fix
SimpleJdbcCall
named parameter binding for Sybase ASE #30231 - DefaultWebClient ignores baseUrl when setting URI_TEMPLATE_ATTRIBUTE #30027
- Avoid eager checkDefaultConnectionProperties call in LazyConnectionDataSourceProxy #29931
- Allow TransactionAwareDataSourceProxy to eagerly fetch the connection #29423
- Extract common value generator out of BeanDefinitionPropertyValueCodeGenerator #28999
- PostgresCallMetaDataProvider should detect current schema as indicated by the JDBC Connection #28723
- Implement setMaxTextMessageSize and setMaxBinaryMessageSize in JettyWebSocketSession #28325
- Optimize cache used in AutowiredAnnotationBeanPostProcessor #28293
@Async
aspect should clear cached executors when different BeanFactory set #28201- Component scanning should be able to ignore encrypted classes with invalid class version #27691
- Property to control URL decoding in
ServletCookieValueMethodArgumentResolver
#26989 - Support
Predicate
- based mappedHandler config inAbstractHandlerExceptionResolver
#26772 SimpleJdbcCall
withnamedBinding=true
for MS SQL Server #26072- Improve default
setNull
performance on PostgreSQL and MS SQL Server (e.g. forNamedParameterJdbcTemplate
batch updates) #25679
🐞 Bug Fixes
<replaced-method />
unnecessarily requires explicitarg-type
since 6.0 #31826- Avoid nested constructor data binding if there are no request parameters #31821
- Custom Init or Destroy method from an interface cannot be invoked in a native image #31819
- Avoid potential refresh deadlock with AbstractApplicationContext#registerShutdownHook #31811
- Classes proxied by CGLIB produces NPE with coroutine async job on Springboot 3.2.0 #31809
- Fix Comparators.nullsLow and Comporators.nullsHigh behavior #31808
MergedAnnotations
finds duplicate annotations on method in multi-level interface hierarchy #31803- Pickup coroutineContext saved by CoWebFilter in coRouter #31793
- Support for multiple CoWebFilters that change CoroutineContext #31792
- TestCompiler should not discover annotation processors on the classpath by default #31791
@Cacheable
key generator is called after invoking the cached method in case of a miss #31789- Encountered
NotSerializableException
forHttpComponentsHeadersAdapter
when serializingHttpClientErrorException
#31787 - Exclude
Part
from nested constructor binding in WebFlux #31778 - Fix condition for "Too many elements" in
MimeTypeUtils.sortBySpecificity()
#31769 AnnotatedTypeMetadata
'sgetMergedRepeatableAnnotationAttributes()
method ignoresclassValuesAsString
#31768- SimpleAsyncTaskScheduler: task with fixed delay stops working after unhandled exception #31749
- Spring unable to decode aggregated JSON content #31747
- cannot resolve
ServerRequest::pathVariable
in nestedRequestPredicate
again #31732 @NotNull
on JPA entity not respected in schema generation #31726@Cacheable
throws NullPointerException when encountering cached null value for empty Mono #31722- RestClient ResponseSpec.body() throws an exception instead of returning
null
if no response body is available #31719 - UrlResource getFilename() suddenly returns null for certain paths #31718
- DisconnectedClientHelper is missing "AbortedException" #31717
- Constructor binding fails for
Duration
argument if request parameter is not present #31709 - TraceId is missing in WebFlux controller handlers #31706
- Wrong observation status tag when a Not Found in a webflux application #31703
- Correct conversion from Resource[] with length 1 to Collection #31699
@ComponentScan
added directly and via a meta-annotation leads to multiple scanning #31704- Unable to use kotlin value classes as function arguments to functions mapping web endpoints #31698
@DisabledInAotMode
does not work in native image #31705- GenericTypeResolver does not resolve nested generics - causes issues with Jackson & Spring MVC #31690
- DefaultManagedTaskScheduler created manually now throws a NPE if the scheduled executor is not configured #31751
- Include Hibernate's
Query.scroll()
inSharedEntityManagerCreator
'squeryTerminatingMethods
set #31682 - TypeDescriptor does not check generics in
equals
method (for ConversionService caching) #31672 - DataBinder fails with "No primary or single unique constructor found for interface MultipartFile" #31669
- SpEL expression on a reloadable type can no longer be resolved #31668
- Programmatic registration of
RequestMappingInfo
leads to "IllegalArgumentException: Expected lookup path" #31662 - Current Observation.Context missing from WebClient request #31609
- Multipart messages with empty parts are not correctly parsed in WebFlux #30953
- Always fall back to original method if annotation pointcut used #30534
- PathEditor cannot handle absolute Windows paths with forward slashes #29881
@Resource
dependency injection fails with AOT/native #29614- Reactor Netty can only get the first cookie value when multiple cookies with the same name exist #28490
- Slow SpEL performance due to method sorting in
ReflectiveMethodResolver
#28377 - Cache-busting does not work when lazy-initialization is enabled #25488
- Fail to register MBean with bean name containing invalid character #23608
- Use of
DatabaseMetadata#getProcedures
(and functions) should take search string escape into account #22725
📔 Documentation
- Fix link text in WebFlux
@HttpExchange
section of reference docs #31796 - Improve documentation for custom exception requirements for RestClient #31783
- Java-based Container Configuration section contains duplicated Section Summary #31777
- SpEL Language Reference section contains duplicated Section Summary #31776
- Incorrect
#this
and#root
variable examples in SpEL documentation #31770 - Document explicit
@ModelAttribute
is required for reflection hints inference #31765 - Fix Javadoc for
MockRestServiceServer.bindTo(RestClient.Builder)
#31741 - Document
-Dspring.context.exit=onRefresh
for Project CRaC testing purpose #31724 - Link to
spring.factories
used in the TestContext framework in the reference manual #31723 - Clarify that DI is a type of IoC #31679
- Polish GenericTypeResolver Javadoc #31663
- RestClient documentation improvements #31659
- Add Javadoc to MvcResult getResponse().getErrorMessage() #31386
- Review Default Profile section in the reference documentation #30319
- Documentation needs to be updated with instructions for STOMP Client #28409
- Document LazyConnectionDataSourceProxy setup for routing datasource to act on transaction definition read-only flag #21415
- Document LazyConnectionDataSourceProxy for IsolationLevelDataSourceRouter usage with DataSourceTransactionManager #19688
🔨 Dependency Upgrades
- Upgrade to Kotlin 1.9.21 #31667
- Upgrade to Micrometer 1.12.1 #31813
- Upgrade to Reactor 2023.0.1 #31814
❤️ Contributors
Thank you to all the contributors who worked on this release:
@HeartPattern, @HyeongMokJeong, @Johannes-Rost, @JuHyun419, @Nijco, @cdalexndr, @dogglezz, @freesme, @giuseppemilicia, @hpoettker, @izeye, @kilink, @lugaramirez, @mathieu-amblard, @meedbek, @perlun, @quaff, @reda-alaoui, @shin-mallang, and @tylerbertrand