Releases: spring-projects/spring-framework
Releases Β· spring-projects/spring-framework
v5.3.34
β New Features
- Log column type for limited support message in
JdbcUtils.getResultSetValue#32603 - Avoid additional unnecessary
Annotationarray cloning inTypeDescriptor#32477 - Avoid cloning empty
Annotationarray inTypeDescriptor#32466
π Bug Fixes
- Refine scheme, userinfo, host and port parsing in UriComponentsBuilder #32618
MethodIntrospector.selectMethods()fails to detect bridge methods across ApplicationContexts #32588- JmsUtils.commitIfNecessary catches and ignores JMS IllegalStateException, losing message with ActiveMQ Artemis #32480
- Consistently apply TaskDecorator to ManagedExecutorService as well #32457
π¨ Dependency Upgrades
- Upgrade to Reactor 2020.0.43 #32594
v6.1.5
β New Features
- Extract reusable method for URI validations #32440
- Allow UriTemplate to be built with an empty template #32432
- Optimize Coroutine invocations #32390
- Improve exception message when Scheduled tasks that are using Virtual Threads fail on shutdown #32381
- Add query parameters to MockMvc Kotlin DSL #32371
- Optimize content type parsing in
ServletServerHttpResponse#32361 - Refine handling of disconnected client error in ExceptionHandlerExceptionResolver #32359
- Refine
\*HttpMessageConverter#getContentLengthreturn value null safety #32325 - Optimize HttpHeaders.getAcceptLanguageAsLocales #32318
- SimpleAsyncTaskScheduler: consistently apply default error handling #32298
- Use Spliterator of underlying collection in MutablePropertyValues / MutablePropertySources #32281
π Bug Fixes
- SpEL fails to compile expression indexing into
booleanarray #32400 - WebClient Observations are missing error #32389
- WebClient request sent twice instantly when using
@Cacheable#32370 - AopUtils.getMostSpecificMethod does not return original method for proxy-derived method anymore #32365
- Fix
ServletResponseHttpHeaders#getnull handling #32362 - Compiled SpEL expression fails if
#rootor#thisis a non-public type #32356 - Suspend handler methods fail on nullable
value classparameters #32353 - Better protect against concurrent error handling for async requests #32340
- Performance degradation due to Kotlin value class checks #32334
- With value referenced from property file in XML configuration, setter selection can be random in case of overloaded setter methods (e.g. on SimpleClientHttpRequestFactory) #32329
constructor-implof Kotlinvalue classis not called #32324- ContentCachingResponseWrapper no longer honors Content-Type and Content-Length #32317
- Hibernate native image support broken by
HHH-17643#32311 - Revisit DatabaseMetadata#getProcedures to only apply fallback if original search yield more than one result #32295
- Remove Observation.Context from WebClient request #32198
π Documentation
- Refine "Redirecting to a resource" section code sample #32423
- Javadoc of ReactorNettyClientRequestFactory#setExchangeTimeout methods have wrong default value #32419
- Fix order of 2 sections in the Validation chapter of the reference manual #32408
- Fix Javadoc #32403
- Document that SpEL expressions using array construction cannot be compiled #32401
- Improve documentation for
@Sqlexecution phases regarding lifecycle #32343 - Omit parameter names in REST Clients section of reference docs #32335
- Different transaction name when using
TransactionAspectSupport.currentTransactionStatus().transactionName#32310 - Provide guidelines for using Kotlin properties with proxies (
@RequestScopeand similar use cases) #32287 - Correct documentation for
userDestinationPrefixinMessageBrokerRegistry#32272
π¨ Dependency Upgrades
β€οΈ Contributors
Thank you to all the contributors who worked on this release:
@Xednar, @ZeroCyan, @bsgrd, @ddaaac, @kilink, @qeeqez, and @quaff
v6.0.18
β New Features
- Extract reusable method for URI validations #32441
- Allow UriTemplate to be built with an empty template #32437
- Refine
\*HttpMessageConverter#getContentLengthreturn value null safety #32333
π Bug Fixes
- WebClient Observations are missing error #32399
- AopUtils.getMostSpecificMethod does not return original method for proxy-derived method anymore #32368
- Better protect against concurrent error handling for async requests #32341
- ContentCachingResponseWrapper no longer honors Content-Type and Content-Length #32321
- Hibernate native image support broken by
HHH-17643#32312
π Documentation
- Fix order of 2 sections in the Validation chapter of the reference manual #32409
π¨ Dependency Upgrades
- Upgrade to Reactor 2022.0.17 #32421
v5.3.33
β New Features
- Extract reusable method for URI validations #32442
- Allow UriTemplate to be built with an empty template #32438
- Refine
*HttpMessageConverter#getContentLengthreturn value null safety #32332
π Bug Fixes
- AopUtils.getMostSpecificMethod does not return original method for proxy-derived method anymore #32369
- Better protect against concurrent error handling for async requests #32342
- Restore Jetty 10 compatibility in JettyClientHttpResponse #32337
- ContentCachingResponseWrapper no longer honors Content-Type and Content-Length #32322
π Documentation
- Build KDoc against
5.3.xSpring Framework Javadoc #32414
π¨ Dependency Upgrades
- Upgrade to Reactor 2020.0.42 #32422
v6.1.4
β New Features
- Add missing RequestPredicate variants in coRouter #32256
- Adapt ConcurrencyThrottleSupport to use ReentrantLock for better virtual thread support #32251
- Create optimized versions of request predicates #32244
- Include function name in
SpelMessage.INCORRECT\_NUMBER\_OF\_ARGUMENTS\_TO\_FUNCTION#32239 - Add Coroutines support to
NonReactiveHandlerMethodPredicate#32227 - RouterFunctionMapping does not implement MatchableHandlerMapping #32221
- Initialize (another) Map with correct size in RequestPredicates #32215
- Make SmartLifecycle
phasevalue configurable in STOMP message handling components #32205 - Initialize Map with correct size in RequestPredicates #32201
- Let
BeanPropertyRowMappersubclasses customize mapped names #32199 - Improve client and server handling of STOMP heartbeat failures #32195
- Optimize Map methods in ServletAttributesMap #32189
- Support binary streams with
JdbcClient#32161 - Annotate core functional SPIs in SpEL with
@FunctionalInterface#32135 - Cannot use
SimpleJdbcInsertwith catalog name #32124 - Refactor ReloadableResourceBundleMessageSource #32118
- Reuse
MapPropertySourceforDynamicValuesPropertySourceimplementation (as a template for custom variants) #32110 - Improve Spring AOP performance for methods without specific advice #32104
- Make it possible to configure any TaskExecutor through ChannelRegistration #32081
- Add support for JSON streams to Kotlin Serialization #32074
- Avoid reflecting to obtain
validationGroupsevery time the call is made #32068 - Reject
@RequestMappingand@HttpExchangedeclarations on the same element #32065 - Missing toString for ExponentialBackOff #32061
- Reject multiple
@HttpExchangedeclarations on the same element #32049 - ClientAbortException from StreamingResponseBody can cause infinite loop of dispatches #32042
- Log warning if multiple
@PostMapping,@GetMapping, etc. annotations are declared #31962 - Using types in
@SessionAttributesis sometimes not reflected in the model #30463 - Improve read publisher cancel handling to avoid connections in CLOSE_WAIT state with WebSocket on Tomcat #30393
- Provide more control over JPA entities scanning #27892
- Provide and document a way to handle single-page application redirects #27257
- MockMvcClientHttpRequestFactory swallows ServletResponse.errorMessage #26720
π Bug Fixes
- Cannot send Server-Sent Events without data using WebMvc.fn SseBuilder #32270
- Fix
pathExtensionnull-safety in Kotlin DSLs #32254 SimpleEvaluationContext.Builderis notfinaland has apublicconstructor #32253@JsonDeserialize(builder = ...)does not work in GraalVM native image #32238- RestClientAdapter claims it supports request attributes when it does not #32232
- ThreadPoolTaskExecutor rejecting tasks as soon as the context has been closed can lead to exceptions during web app shutdown #32226
- Consistent parsing of user information in UriComponentsBuilder #32211
- "IllegalStateException: Cannot call sendError() after the response has been committed" when IOException is thrown during resolving method argument values on Tomcat >= 10.1.16 #32206
- No longer able to override the
toString()inHandlerMethodfrom6.1.3#32184 - 6.1.3 regression: aspect not called with multiple inheritance #32181
- Unable to use baseUrl on builders created from RestTemplate #32180
- MessageDeliveryException on shutdown with open WebSocket connections #32171
- With XML configuration, setter selection can be random in case of overloaded setter methods (e.g. on SimpleClientHttpRequestFactory in 6.1.3 from convertForProperty method) #32159
- Cannot process AOT when spring-orm is on the classpath without JPA #32155
- SpEL's
Indexer.setArrayElement()incorrectly requests conversion to wrapper instead of primitive #32147 - SpEL increment and decrement operators do not generate prefix AST representation #32144
- Validation of
PartEventHttpMessageReader#maxPartsis off by one #32122 - QualifierAnnotationAutowireCandidateResolver.checkQualifier does identity checks when comparing arrays used as qualifier fields #32106
- Guard against multiple body subscriptions in Jetty and JDK reactive responses #32100
- Parameter based cache keys on repository methods can't resolve after 6.1.2->6.1.3 #32087
- Exceptions thrown by custom error handlers are not recorded in RestTemplate observations #32060
- Static resources caching issues with ShallowEtagHeaderFilter and Jetty caching directives #32039
RestClientcalls interceptors fromRestTemplatetwice #32038DefaultRestClientBuilder.defaultRequest(...)doesn't do anything #32028- Alias resolution error message in
SimpleAliasRegistryis misleading #32025 - Destroy method not found in Native image for
ExecutorServiceBean type #32006 RequestPredicatefails with WebFlux 6.1.2 #31955- ChannelSendOperator.WriteBarrier race condition in request(long) method leads to response being dropped #31865
π Documentation
- Fix Kotlin syntax errors in RestClient builder example in rest-clients.adoc #32265
- Use double dot in "META-INF/aop.xml" documentation #32264
- Document that functions are variables in SpEL EvaluationContexts #32258
- Add section on AOT best practices about registering beans programmatically #32241
- Add section on AOT best practices about registering singletons #32240
- Fixes syntax error in JdbcClient examples #32236
- Document
@RequestAttributein HTTP clients [#32231](https://github.com/spring-projects/spring-framework...
v6.0.17
β New Features
- RouterFunctionMapping does not implement MatchableHandlerMapping #32222
- Optimize Map methods in ServletAttributesMap #32197
π Bug Fixes
@JsonDeserialize(builder = ...)does not work in GraalVM native image #32257- Consistent parsing of user information in UriComponentsBuilder #32246
- "IllegalStateException: Cannot call sendError() after the response has been committed" when IOException is thrown during resolving method argument values on Tomcat >= 10.1.16 #32207
- Cannot process AOT when spring-orm is on the classpath without JPA #32160
- QualifierAnnotationAutowireCandidateResolver.checkQualifier does identity checks when comparing arrays used as qualifier fields #32107
- Guard against multiple body subscriptions in Jetty and JDK reactive responses #32102
- Exceptions thrown by custom error handlers are not recorded in RestTemplate observations #32063
- Static resources caching issues with ShallowEtagHeaderFilter and Jetty caching directives #32050
- ChannelSendOperator.WriteBarrier race condition in request(long) method leads to response being dropped #32020
- Destroy method not found in Native image for
ExecutorServiceBean type #32017
π Documentation
- Update basics.adoc #32151
- Document cron-vs-quartz parsing convention for dayOfWeek part in CronExpression #32130
π¨ Dependency Upgrades
- Upgrade to Reactor 2022.0.16 #32275
v5.3.32
β New Features
- Add CORS support for Private Network Access #31974
- Avoid early getMostSpecificMethod resolution in CommonAnnotationBeanPostProcessor #31969
π Bug Fixes
- Consistent parsing of user information in UriComponentsBuilder #32247
- QualifierAnnotationAutowireCandidateResolver.checkQualifier does identity checks when comparing arrays used as qualifier fields #32108
- Guard against multiple body subscriptions in Jetty and JDK reactive responses #32101
- Static resources caching issues with ShallowEtagHeaderFilter and Jetty caching directives #32051
- ChannelSendOperator.WriteBarrier race condition in request(long) method leads to response being dropped #32021
- Spring AOP does not propagate arguments for dynamic prototype-scoped advice #31964
- MergedAnnotation swallows IllegalAccessException for attribute method #31961
- CronTrigger hard-codes default ZoneId instead of participating in scheduler-wide Clock setup #31950
MergedAnnotationsfinds duplicate annotations on method in multi-level interface hierarchy #31825- PathEditor cannot handle absolute Windows paths with forward slashes #31728
- Include Hibernate's
Query.scroll()inSharedEntityManagerCreator'squeryTerminatingMethodsset #31684 - TypeDescriptor does not check generics in
equalsmethod (for ConversionService caching) #31674 - Slow SpEL performance due to method sorting in ReflectiveMethodResolver #31665
- Jackson encoder releases resources in wrong order #31657
- WebSocketMessageBrokerStats has null stats for stompSubProtocolHandler since 5.3.2 #31642
π Documentation
- Document cron-vs-quartz parsing convention for dayOfWeek part in CronExpression #32131
π¨ Dependency Upgrades
- Upgrade to Reactor 2020.0.41 #32276
v6.1.3
β New Features
- Perform checks for bean validation constraints in HandlerMethod only when needed #32007
- Exclude URI query from remaining WebClient checkpoints #31992
- Avoid early getMostSpecificMethod resolution in CommonAnnotationBeanPostProcessor #31967
- Introduce
processInjection()inCommonAnnotationBeanPostProcessor#31956 - Make maximum length of SpEL expressions in an
ApplicationContextconfigurable #31952 JdkClientHttpRequestmay block indefinitely #31911- Allow
Propagation.NOT\_SUPPORTEDwith@TransactionalEventListener#31907 - Review HibernateJpaVendorAdapter to align dialect to use for recent Hibernate versions #31896
- Improve method validation support for containers with constraints on container elements #31887
- Method validation is not triggered when constraints are applied to the elements of a List #31870
- Use standard String comparison in ExtendedBeanInfo.PropertyDescriptorComparator #31866
- Detect Jetty 12 "max length exceeded" message for
MaxUploadSizeExceededException#31850 - Ensure that Observation is stopped and Scope is closed in doReceiveAndExecute() #31798
- Support the use of
@Resourcein test classes in AOT mode #31733 - Add support for configuring sslContext in StandardWebSocketClient #30680
- Refine allocations for improved memory profile when creating a large amount of proxy instances #30499
- Check ResponseStatusException reason as MessageSource code for ProblemDetail #30300
SpringValidatorAdapterfails ingetRejectedValueifValueExtractorused in property path to unwrap a container type #29043- Add CORS support for Private Network Access #28546
- Introduce NoOpTaskScheduler for disabling
@Scheduledtasks in test setups #28073 - MvcUriComponentsBuilder should resolve property placeholders in request mapping paths #26795
- Allow SockJsUrlInfo to be overridden in SockJsClient #25888
- Extending abstract class does not expose parameter annotations #25788
- DatabasePopulatorConfigUtils should only set a populator if matching scripts are defined #23405
@annotationpointcut is not matched with complex hierarchy and generics against classes compiled by Eclipse [SPR-17310] #21843- Allow registration of application event listeners in a functional way [SPR-16872] #21411
- Allow CronTrigger to resume from specified timestamp [SPR-14909] #19475
π Bug Fixes
- Using a URI variable for port in
WebClientcauses anIllegalStateException#32003 - [spring-tx] Unable to override prepareSynchronization of AbstractPlatformTransactionManager from v6.1.0 #32000
RestClientResponseExceptionhandlesresponseHeaderscase-sensitive #31978- CronTrigger hard-codes default ZoneId instead of participating in scheduler-wide Clock setup #31948
- HandlerMappingIntrospector is throwing PatternSyntaxException for wildcards in the request URL #31937
- java.lang.NullPointerException with Scheduled tasks through DefaultScheduledTaskObservationConvention #31918
- HibernateJpaVendorAdapter refers to org.hibernate.dialect.Oracle12cDialect that does not exist in recent Hibernate versions #31892
- ClassNotFoundException: org.hibernate.dialect.MySQL57Dialect with Hibernate 6.4 #31889
- Inconsistent inclusion of base URL in
WebClientURI template attribute since Spring WebFlux 6.1.2 #31882 @Asyncdoes not supportUnit?return type #31881- Web handlers don't support Kotlin extensions #31876
- DefaultDataBuffer fails to transform its content to a string #31873
- With XML configuration, setter selection can be random in case of overloaded setter methods (e.g. on SimpleClientHttpRequestFactory in 6.1) #31872
- Complete frame callback when opcode is not PONG #31869
@Cacheabledoes not respect cache hit when empty Mono/Flux response is returned #31868- Unable to use sync cache with reactivestreams #31861
- Spring Websocket - JettyWebsocketHandlerAdapter copyByteBuffer fills Buffer with zeros #31857
NullPointerExceptionwith@RequestMappingon Kotlin property accessors #31856- Non-deterministic native image JSON hints invalidate Gradle build cache #31852
- DefaultServerRequestObservationConvention is silently used when multiple convention beans are defined #31864
- Significant increase in memory consumption
StringDecoderwhen splitting input by delimiters. #31848 - Convert args to Kotlin value class in CoroutinesUtils #31846
- ForwardedHeaderFilter should reject invalid requests #31842
- NotReadablePropertyException due to mismatch between
ConstraintViolationproperty path andBindingResulttarget inMethodValidationAdapter#31746 - Built-in method validation validates
@RequestBodyparameter twice #31711 - Double error response handling on suspended methods #31541
- Spring AOP does not propagate arguments for dynamic prototype-scoped advice #28407
- Only log status in ServletRequestHandledEvent #27595
- MergedAnnotation swallows IllegalAccessException for attribute method #27182
- AOP pointcut erroneously matching
ProceedingJoinPoint.proceedwhen called from within another advised bean #26068
π Documentation
- Document exception handling for HTTP Interface client with
RestClientandRestTemplate#31991 - Update
ContentRequestMatchers#multipartDataJavadoc #31988 - Update Spring Properties section of reference manual #31987
- Document Kotlin
internalmodifier impact on@Bean#31985 - Add missing preposition in reference guide #31977
- Adapt
Jackson2ObjectMapperBuilderdocumentation to mentionParameterNamesModuleregistration #31959 - Fix typo in kotlin.adoc #31958
- Fix references to "application/*+xml" in Javadoc...
v6.0.16
β New Features
- Exclude URI query from remaining WebClient checkpoints #32001
- Add CORS support for Private Network Access #31975
- Avoid early getMostSpecificMethod resolution in CommonAnnotationBeanPostProcessor #31968
π Bug Fixes
- Double error response handling on suspended methods #31990
- DefaultDataBuffer fails to transform its content to a string. #31979
- Spring AOP does not propagate arguments for dynamic prototype-scoped advice #31963
- MergedAnnotation swallows IllegalAccessException for attribute method #31960
- CronTrigger hard-codes default ZoneId instead of participating in scheduler-wide Clock setup #31949
- HandlerMappingIntrospector is throwing PatternSyntaxException for wildcards in the request URL #31946
- ForwardedHeaderFilter should reject invalid requests #31894
@Asyncdoes not supportUnit?return type #31891- Significant increase in memory consumption
StringDecoderwhen splitting input by delimiters. #31859
π Documentation
- Update
ContentRequestMatchers#multipartDataJavadoc #31989
π¨ Dependency Upgrades
- Upgrade to Reactor 2022.0.15 #31997
v6.1.2
β New Features
- Optimize ContentCachingRequestWrapper allocation for known request size #31834
- Inherit parent context in
coRouterDSL #31831 - Declare
isStaticandreleaseTargetas 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
MockPartconstructor 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
TestExecutionListeners atWARNlevel #31688 - Document need for
-parametersflag in exception messages #31675 - Improve
@RegisterReflectionForBindingfor 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@Lazyfallback 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
SimpleJdbcCallnamed 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
@Asyncaspect 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 SimpleJdbcCallwithnamedBinding=truefor MS SQL Server #26072- Improve default
setNullperformance on PostgreSQL and MS SQL Server (e.g. forNamedParameterJdbcTemplatebatch updates) #25679
π Bug Fixes
<replaced-method />unnecessarily requires explicitarg-typesince 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
MergedAnnotationsfinds 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
@Cacheablekey generator is called after invoking the cached method in case of a miss #31789- Encountered
NotSerializableExceptionforHttpComponentsHeadersAdapterwhen serializingHttpClientErrorException#31787 - Exclude
Partfrom 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::pathVariablein nestedRequestPredicateagain #31732 @NotNullon JPA entity not respected in schema generation #31726@Cacheablethrows NullPointerException when encountering cached null value for empty Mono #31722- RestClient ResponseSpec.body() throws an exception instead of returning
nullif no response body is available #31719 - UrlResource getFilename() suddenly returns null for certain paths #31718
- DisconnectedClientHelper is missing "AbortedException" #31717
- Constructor binding fails for
Durationargument 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
@ComponentScanadded 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
@DisabledInAotModedoes not work in native image #31705- GenericTypeResolver does not resolve nested generics - causes...