Releases: spring-projects/spring-framework
Releases Β· 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
ExecutorService
Bean 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
MergedAnnotations
finds 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
'squeryTerminatingMethods
set #31684 - TypeDescriptor does not check generics in
equals
method (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
ApplicationContext
configurable #31952 JdkClientHttpRequest
may block indefinitely #31911- Allow
Propagation.NOT\_SUPPORTED
with@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
@Resource
in 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
SpringValidatorAdapter
fails ingetRejectedValue
ifValueExtractor
used in property path to unwrap a container type #29043- Add CORS support for Private Network Access #28546
- Introduce NoOpTaskScheduler for disabling
@Scheduled
tasks 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
@annotation
pointcut 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
WebClient
causes anIllegalStateException
#32003 - [spring-tx] Unable to override prepareSynchronization of AbstractPlatformTransactionManager from v6.1.0 #32000
RestClientResponseException
handlesresponseHeaders
case-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
WebClient
URI template attribute since Spring WebFlux 6.1.2 #31882 @Async
does 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
@Cacheable
does 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
NullPointerException
with@RequestMapping
on 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
StringDecoder
when 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
ConstraintViolation
property path andBindingResult
target inMethodValidationAdapter
#31746 - Built-in method validation validates
@RequestBody
parameter 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.proceed
when called from within another advised bean #26068
π Documentation
- Document exception handling for HTTP Interface client with
RestClient
andRestTemplate
#31991 - Update
ContentRequestMatchers#multipartData
Javadoc #31988 - Update Spring Properties section of reference manual #31987
- Document Kotlin
internal
modifier impact on@Bean
#31985 - Add missing preposition in reference guide #31977
- Adapt
Jackson2ObjectMapperBuilder
documentation to mentionParameterNamesModule
registration #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
@Async
does not supportUnit?
return type #31891- Significant increase in memory consumption
StringDecoder
when splitting input by delimiters. #31859
π Documentation
- Update
ContentRequestMatchers#multipartData
Javadoc #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
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...
v6.0.15
β New Features
- Skip buffer allocation in
StreamUtils.copy(String)
#31631
π Bug Fixes
<replaced-method />
unnecessarily requires explicitarg-type
since 6.0 #31828MergedAnnotations
finds duplicate annotations on method in multi-level interface hierarchy #31824- Fix condition for "Too many elements" in
MimeTypeUtils.sortBySpecificity()
#31773 - Spring unable to decode aggregated JSON content #31772
- Multipart messages with empty parts are not correctly parsed in WebFlux #31766
- PathEditor cannot handle absolute Windows paths with forward slashes #31727
- TraceId is missing in WebFlux controller handlers #31716
- Wrong observation status tag when a Not Found in a webflux application #31715
- Fail to register MBean with bean name containing invalid character #31708
- Include Hibernate's
Query.scroll()
inSharedEntityManagerCreator
'squeryTerminatingMethods
set #31683 - TypeDescriptor does not check generics in
equals
method (for ConversionService caching) #31673 - SpEL expression on a reloadable type can no longer be resolved #31670
- Slow SpEL performance due to method sorting in ReflectiveMethodResolver #31664
- Jackson encoder releases resources in wrong order #31656
- Current Observation.Context missing from WebClient request #31646
- WebSocketMessageBrokerStats has null stats for stompSubProtocolHandler since 5.3.2 #31641
<jee:local-slsb>
no longer works with abusiness-interface
attribute #31630- GeneratedFiles#addSourceFile should not allow to add a source in the default package #31629
PathResourceResolver.getResource()
does not log warning ifResource#getURL()
throws exception #31624
π Documentation
- Document explicit
@ModelAttribute
is required for reflection hints inference #31767 - Documentation needs to be updated with instructions for STOMP Client #31678
- Improve STOMP WebSocket documentation for input message buffer size #31654
π¨ Dependency Upgrades
- Upgrade to Reactor 2022.0.14 #31815
v6.1.1
β New Features
- Skip buffer allocation in
StreamUtils.copy(String)
#31621 - Caching and Event Listening support do not reuse internal delegates for their evaluation contexts #31617
- Java 17: resource.isReadable() with concurrency leaks large amounts of non-heap memory #30955
π Bug Fixes
- Spring MVC: Unexpected bytes added to the HTTP response for kotlin.Unit return type in controller methods #31648
- Spring Data Redis Cache implementation is not compatible with
Cache.retrieve(key)
semantics #31637 - GeneratedFiles#addSourceFile should not allow to add a source in the default package #31628
<jee:local-slsb>
no longer works with abusiness-interface
attribute #31627- Non-blocking
@Cacheable
method does not support condition with#result
#31626 PathResourceResolver.getResource()
does not log warning ifResource#getURL()
throws exception #31623- Jackson encoder releases resources in wrong order #30493
- WebSocketMessageBrokerStats has null stats for stompSubProtocolHandler since 5.3.2 #26536
π Documentation
- Fix links related to Spring WebFlux #31632
- Extract recurring asciidoc links to attributes #31619
- Improve STOMP WebSocket documentation for input message buffer size #31616
- Document support for AppCDS #31497
β€οΈ Contributors
Thank you to all the contributors who worked on this release:
@7fantasy7, @Star-ho, and @quaff
v6.1.0
β New Features
- When using Oracle,
JdbcClient.update(KeyHolder)
does not work without explicit key column names #31607 - Introduce way to convert ClientHttpResponse to desired type #31597
- Property-driven onRefresh exit for AppCDS purpose #31595
- No Micrometer traceId in JMS listener container errorHandler #31559
- Register Hibernate
@EmbeddableInstantiators
registered on JPA embeddables for reflection #31534 - Improve method validation support for errors on elements within a container #31530
- Support pattern matching for method names in
ControlFlowPointcut
#31435 - Review reachability metadata contributions after GraalVM changes #31213
- handleEmptyBody of RequestBodyAdvice should apply also when content-type is not set #30522
π Bug Fixes
- Regression with
@EnableJpaAuditing
using Spring Boot 3.2-RC2 in native image #31575 - Retrieving the response body as a List of POJOs fails with
RestClient
but passes withWebTestClient
#31574 ExecutorLifecycleDelegate
should callExecutorService.isTerminated()
in?.isRunning()
#31549RestTemplate
POST to endpoint using Digest Auth no longer works in 6.1 #31516- Code generation for constructor arguments must cast
null
indexed argument value #31508 - \n in form model when using Jetty 12 client and multipart/form-data #31361
- Add status handler to recognize unknown status codes outside of 4xx/5? #31202
π Documentation
- Document how to log
@Sql
scripts and statements #31589 - Link to KDoc API documentation from Javadoc overview #31587
- Fix link in Javadoc of ConfigurableMockMvcBuilder #31542
- Add note about
@[Enabled|Disabled]InNativeImage
in reference manual #31438 - Document
@DisabledInAotMode
in the reference manual #31437 - Document
@Sql
class-level execution phase support in the reference manual #31377 - Document that Micrometer's "error" tag should be preferred vs. legacy "exception" tag #31514
π¨ Dependency Upgrades
- Upgrade to Context Propagation 1.1.0 #31599
- Upgrade to Kotlin 1.9.20 #31539
- Upgrade to Micrometer 1.12.0 #31556
- Upgrade to Reactor 2023.0.0 #31557
β€οΈ Contributors
Thank you to all the contributors who worked on this release:
@Young-Zen, @duesenklipper, @izeye, @k-seth, and @wakingrufus
v6.0.14
β New Features
- Provide caching for HandlerMappingIntrospector lookups #31588
Log4jLog
needs to re-resolveExtendedLogger
on deserialization (for compatibility with Log4J 2.21) #31582- Optimize
StandardTypeLocator
for hotspot when the same classes are resolved #31579 - Add duplicate key exception error code for SAP HANA database #31554
- Do not delegate TRACE to HttpServlet on ERROR dispatch #31457
- Add
properties
setter toProblemDetail
#31430
π Bug Fixes
- GeneratedFiles#addSource does not provide proper context if the specified class name is invalid #31612
- MessageBuilder#createMessage should not define the payload as
@Nullable
#31610 - Default Mixin added by Jackson2ObjectMapperBuilder are missing required runtime hints #31606
- NettyDataBuffer#toByteBuffer fails if readPosition > 0 #31605
- Avoid duplicate JAR resources in
PathMatchingResourcePatternResolver
on MS Windows #31598 NamedParameterUtils
broken parsing related to square brackets #31596- Multipart cleanup is done too eagerly #31567
- Jakarta validation field constraints in superclass are ignored in native image #31552
- Function column out doesn't resolve to
SqlOutParameter
#31550 - Restore support for recursive annotations in Kotlin #31518
- Resolve to empty
MultiValueMap
when no matrix variables are provided #31483 ProxyFactoryBean
declaration may lead to unexpected non-fatal "FactoryBean threw exception from getObjectType" stacktrace output #31473- Use of
@Value
in compact constructor of a record should not register method injection #31433 - Prevent duplicate HTTP server observations for cancelled exchanges #31417
- Spring MVC raises MissingPathVariableException resulting in 500 instead of 400 error when path segment is u001F or u00D and cannot be converted to target type UUID #31382
- Ensure consistent value count in ConcurrentReferenceHashMap#Segment #31373
- HeaderContentNegotiationStrategy.resolveMediaTypes throws unexpected IllegalArgumentException #31254
- Session Cookie in Reactive WebSession is not deleted if maxAge is set through cookie initializer (e.g. via Boot application property) #31214
- DefaultWebClient logs URI without the port number #30519
- CGLIB
BeanCopier
falls back toClassLoader.defineClass
for public target #28699 - BeanUtils.copyProperties() consumes large amount of memory #27246
π Documentation
- RestTemplate initialization documentation in 6.0.x mentions Netty, yet no ClientHttpRequestFactory is present in the package. #31526
- Correct typo in annotations.adoc #31519
- Document X-Forwarded-* Headers #31491
- Improve support and documentation for the "default" bean definition profile name #29071
- Document that
pertypewithin
is supported by Spring AOP #25887 - Document alternatives of using multiple
PropertyPlaceholderConfigurer
s [SPR-9989] #14623
π¨ Dependency Upgrades
β€οΈ Contributors
Thank you to all the contributors who worked on this release:
@CrotchBurnt, @GVictorG7, @PiotrFLEURY, @baratrax, @bernie-schelberg-invicara, @huyachigege, @izeye, @lorenzsimon, @martin-lukas, and @rwinch
v5.3.31
β New Features
Log4jLog
needs to re-resolveExtendedLogger
on deserialization (for compatibility with Log4J 2.21) #31583
π Bug Fixes
- MessageBuilder#createMessage should not define the payload as
@Nullable
#31611 - Avoid duplicate JAR resources in
PathMatchingResourcePatternResolver
on MS Windows #31603 - Spring web integration commons fileupload receives files and other parameter uploads, with a null pointer #31564
- Function column out doesn't resolve to
SqlOutParameter
#31560 - Resolve to empty MultiValueMap when no matrix variables are provided #31484
- BeanUtils.copyProperties() consumes large amount of memory #31481
- CGLIB
BeanCopier
falls back toClassLoader.defineClass
for public target #31436 - R2DBC Connection is closed during transaction when using TransactionAwareConnectionFactoryProxy #31411
HibernateJpaDialect
andHibernateExceptionTranslator
throwSQLExceptionTranslator
-provided exception instead of returning it #31410NamedParameterJdbcTemplate
throws unexpected exception fornull
query #31394LazyResolutionMessage
does not implement propertoString
#31385- Illegal reflective access in
ContextOverridingClassLoader.isEligibleForOverriding
#31233
π Documentation
- Clarify documentation for
@Transactional
on interfaces #31401 - Default behavior of BeanPropertyRowMapper.getColumnValue(ResultSet, int, Class) inconsistent with code #31349
- Referencing a
@Bean
method in a@Configuration
class'@PostConstruct
method leads to circular reference #31339 - Incorrect reference information about CGLIB supported method visibility #31311
π¨ Dependency Upgrades
- Upgrade to Reactor 2020.0.38 #31584