Releases: spring-projects/spring-framework
Releases · spring-projects/spring-framework
v5.2.10.RELEASE
⭐ New Features
- Optimize Jackson resource management in codecs #25910
- Avoid creation of unused logger instance in AbstractMediaTypeExpression #25901
- Native Hibernate 5 bootstrapping with JTA transaction manager requires hibernate.transaction.coordinator_class=jta to be set #25858
- Cannot test
@RequestPart
multipart controllers with Servlet MockPart #25829 - Add MariaDB to the supported database products for procedures and functions #25811
- Optimize String argument resolution in MessageTag #25809
- Avoid repeated Charset resolution in MimeType #25808
🪲 Bug Fixes
- Incorrect http response for a request using the Range header for pre-compressed resources #25976
@ActiveProfiles
with same profiles but different order results in duplicate ApplicationContext #25973- LinkedMultiValueMap downstream issue with MultiValueMapAdapter package private base class #25960
- DataBufferUtils.CompositeMatcher causes poor performance when one or more matchers does not match #25915
- HttpSeverOperations overrides content-length to 0 on HTTP HEAD #25908
- jsessionid breaks request mappings when removeSemicolonContent is turned off #25864
- JettyClientHttpConnector triggers early cancellation #25849
- Race condition in DataBufferUtils.readAsynchronousFileChannel resulting in FD leak (Channel remains open) #25831
- SimpMessagingTemplate.convertAndSend results in UnsupportedOperationException when Spring Cloud Sleuth is present #25821
- ClassCastException when wiring bean using method injection (NullBean instead of 'null') #25806
- Thread-scoped bean creation freezes if dependent bean is retrieved before dependency bean #25801
- Sending an event as part of the EMF lock triggers a deadlock #25799
- Wrong type inference in Kotlin while overriding RequestMappingHandlerMapping#getMappingForMethod #25657
- SseEmitter (ResponseBodyEmitter) keeps collecting messages if not initialized #25442
📔 Documentation
- Correct DispatcherServlet initialization sample webmvc.adoc #25965
- Document that TransactionalEventListener only works with non-reactive transactions #25805
- Published reference documentation contains unnecessary folders and files #25783
- Incorrect example in javadocs of Assert.notNull(object, messageSupplier) #25774
🔨 Dependency Upgrades
v5.1.19.RELEASE
⭐ New Features
- Optimize String argument resolution in MessageTag #25923
- Avoid creation of unused logger instance in AbstractMediaTypeExpression #25902
- Cannot test
@RequestPart
multipart controllers with Servlet MockPart #25894 - Native Hibernate 5 bootstrapping with JTA transaction manager requires hibernate.transaction.coordinator_class=jta to be set #25862
- Add MariaDB to the supported database products for procedures and functions #25812
🪲 Bug Fixes
- Incorrect http response for a request using the Range header for pre-compressed resources #25979
@ActiveProfiles
with same profiles but different order results in duplicate ApplicationContext #25974- LinkedMultiValueMap downstream issue with MultiValueMapAdapter package private base class #25961
- jsessionid breaks request mappings when removeSemicolonContent is turned off #25867
- SimpMessagingTemplate.convertAndSend results in UnsupportedOperationException when Spring Cloud Sleuth is present #25835
- Wrong type inference in Kotlin while overriding RequestMappingHandlerMapping#getMappingForMethod #25818
- ClassCastException when wiring bean using method injection (NullBean instead of 'null') #25807
📔 Documentation
- Published reference documentation contains unnecessary folders and files #25794
- Incorrect example in javadocs of Assert.notNull(object, messageSupplier) #25775
🔨 Dependency Upgrades
- Upgrade to Reactor Californium-SR22 #25948
v5.3.0-RC2
⭐ New Features
- Compatibility with Jackson 2.12 #25907
- Loggers apparently constructed on a per HTTP request basis in reactive web code cause CPU overhead #25900
@ControllerAdvice
order defined via@Order
on a@Bean
method is not applied #25872- Add missing awaitBodilessEntity and createExceptionAndAwait ClientResponse extensions #25866
- Add Dependencies Manifest Entry to spring-core #25852
- Subclasses of UrlBasedViewResolver could avoid reflection when creating instances of View #25847
- Add option to disable Last-Modified handling when serving static resources #25845
- FormHttpMessageConverter to preserve parameters from the input MediaType #25839
- Request data binding fails for params with an empty array "[]" suffix #25836
- Support for an async determination of status and headers with a WebMvc HandlerFunction #25828
- Deprecate LiveBeansView #25820
- MultipartFile[] required controller param, not throwing exception #25819
- Optimize StringUtils trimLeading/Trailing methods #25810
- Set the sameSite cookie attribute in ClientHttpResponse implementations #25785
- Unable to change Clock for spring framework scheduling #25782
- Resolve Principal argument only when not annotated #25780
- Use the function endpoint, filter the handler function, and find that remoteAddress is null, params is empty #25776
- Add kotlinx.serialization JSON support to Spring WebFlux #25771
- Make path pattern optional in router functions #25752
- Deprecate WebClient#exchange() and provide safer alternatives #25751
- Easing the application of CORS default settings through the WebMvcConfigurer#corsConfigurer method #25716
- Empty or blank required UUID header validation results in 200 response status #23939
- Support suspending handler methods in Spring MVC #23611
- Introduce Converter.andThen(...) #23379
- Remove inefficiency in HttpStatus.series() #22366
- Provide Gson/JSON-B MessageConverter for spring-messaging (aligned with spring-web) #21496
- Discover test configuration on enclosing class for nested test class [SPR-15366] #19930
🪲 Bug Fixes
- WebTestClient no longer captures the URI template #25854
- Webflux Routing DSL's onError filters execute in unexpected order #25541
- TransactionalOperator.executeAndAwait returns value too early #25007
📔 Documentation
- Document DefaultPartHttpMessageReader #25827
- Update WebFlux documentation with regards to logging appenders #25547
- Upgrade to Asciidoctor Gradle plugin 3.x #24991
🔨 Dependency Upgrades
- Upgrade to Kotlin Coroutines 1.4.0-M1 #25914
- Upgrade to RSocket 1.1.0-RC1 #25898
- Upgrade to Reactor 2020.0.0-RC2 #25884
- Upgrade to Kotlin 1.4.10 #25779
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.3.0-RC1
⭐ New Features
- MimeMessageHelper should not encode attachment filenames by default #25770
- A beforeCommit chain failure invariably results in a 500 response #25753
- Improve performance of JdkDynamicAopProxy.getProxy(ClassLoader) #25660
- Add URI variables to request context in AbstractUrlHandlerMapping (reactive) #25648
- Public method in RSocketMessageHandler to register any handler method #25639
- Allow early decoration of request and response in WebFlux #25633
- Spring Test: Methods should allow supertypes of Matcher using lower bounded wildcards #25610
- WebSocket configuration doesn't work properly with the buffer size limitation #25581
- Declare interfaces as
@FunctionalInterface
where feasible #25580 - Call StartupStep.end in finally block #25572
- Support filename hint for client side use of ResourceDecoder #25516
- No way to set timeout for the requests when using Jetty reactive httpclient #25493
- Mime type "application/*" is not compatible with "application/vnd+json" #25350
- Avoid resizing of fixed-size HashMap #25349
- Support RSocket Load Balancing #25333
- WebClient HTTP Request Timeout #25115
- Support a
RowMapper<T>
for Java record classes #24695 - Data binding for Java record classes #24391
- Failure to bind a component of a form backing object using constructor binding causes the object to be null #24372
- Concurrent access to ParsedSql cache in NamedParameterJdbcTemplate #24197
- WebClient: wrap connection exceptions #23842
- Extract MimeTypeUtils.ConcurrentLruCache and make it public #22789
- WebSocket support with
@EnableWebFlux
#22587 - Add kotlinx.serialization JSON support to Spring MVC #21188
- Common API for MockMvc tests and for real HTTP tests #19647
🪲 Bug Fixes
- Upgrading from Boot 2.3.3 or 2.4-M1 to Boot 2.4-M2 uses 125mb heap in BitsCronField #25687
- Copy httpHandlerDecorator in copy constructor for WebHttpHandlerBuilder #25656
- MockMvc does not correctly initialize the request for non-file mock Part uploads #25602
- WebFlux application server add server.forward- Headers - Strategy = Framework RouterFunction endpoint 404 #25270
📔 Documentation
- Fix typo in Regular Expression Pointcuts docs #25767
- Fix typo regarding Ordered interface in core-aop.adoc #25759
- Fix typo in websocket.adoc #25630
- Eliminate unnecessary word in core-bean.adoc that causes repetition #25585
- Publish documentation under reference/html folder #25071
🔨 Dependency Upgrades
- Upgrade to RSocket 1.1 M2 #25729
- Upgrade to Reactor 2020 RC1 #25728
- Upgrade to Kotlin 1.4.0 #25617
- Upgrade to Gradle 6.6 #25578
- Upgrade to JUnit 5.7 #25527
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.2.9.RELEASE
⭐ New Features
- HttpHeaders.setContentDispositionFormData should ignore empty filename #25769
- StringDecoder does not provide a way to configure the default charset #25762
- MimeMessageHelper.addAttachment: configurable encoding of attachment filename #25755
- Current log level not checked by LogAccessor supplier-enabled logging methods #25741
- PropertiesLoaderSupport should ignore socket/connect exceptions as well #25717
- Avoid repeated calls to getPathWithinApplication from UrlPathHelper.getLookupPathForRequest #25669
- Avoid full singleton lock for DefaultSingletonBeanRegistry.getSingleton(beanName, false) #25667
- XStreamMarshaller should avoid direct use of CompositeClassLoader which is not exported by XStream in OSGi #25662
- Avoid LinkedList performance issues through use of ArrayDeque #25652
- Introduce createContext() factory method in AbstractGenericContextLoader #25600
- Declare MessagePostProcessor as a
@FunctionalInterface
#25571 - Assert preconditions for MergedAnnotations.from() factory methods #25568
- Provide access to AbstractRoutingDataSource's resolved target DataSources #25544
- Possible optimization in UrlResource #25531
- Refine use of substring operations #25445
- Cache abstraction does not log hit / miss for synchronized access #25248
🪲 Bug Fixes
- Issue with Forwarded Header and Multiple Values #25737
- CallMetaDataContext.reconcileParameters overwrites cursor name #25707
- VerifyErrors when using SpEL compilation with Thymeleaf when invoking a default method defined in an interface #25706
- SQLErrorCodesFactory.getErrorCodes(DataSource) returns empty error codes if access to transactional connection fails #25681
- Make "org.springframework.util.unit.DataSize" class Serializable #25675
- Joda-Time presence check fails to detect Joda-Time 2.x specifically #25655
- Regression in SimpleThreadScope introduced in 5.2.7 #25618
- Potential integer overflow in ExecutorConfigurationSupport.setAwaitTerminationSeconds(int) and AbstractResourceBasedMessageSource.setCacheSeconds(int) #25613
- Remove session on 4xx response from WebSocket handshake #25608
- spring-jdbc don't set out parameter name from metadata for Postgresql function after issue#25399 #25588
- FileUrlResource isWritable method returns true if URL protocol is not indicating a file #25584
- Lazy dependency proxy does not populate bean dependencies #25562
- Bean creation fails with StackOverflowError after upgrading from 5.1.13 to 5.2.7 #25546
- StaticListableBeanFactory.isSingleton() returns false for singleton beans #25522
- Standalone MockMvc ignores
@RestControllerAdvice
annotation attributes #25520 - MockHttpServletResponse reset() does not reset charset field #25501
- AnnotationTypeMappings does not filter repeatable annotations #25483
- Wrong error message for type mismatch in jsonPath().value() #25480
- Fix infinite loop bug in AnnotationScanner #25429
- Overloaded
@Bean
method with name mismatch causes bean to be created twice (in case of ASM processing) #25263
📔 Documentation
- Prevent confusion about build(boolean) method in UriComponentsBuilder #25604
- Document how to specify Jackson JSON view serialization hints with
@RestController
and Webflux #25596 - Inconsistent log level in
@Bean
javadoc and ConfigurationClassEnhancer #25590 - Fix asciidoctor syntax for source #25539
- Improve Javadoc for
@RequestMapping
#params #25482 - Document that SimpleCacheManager requires caches to be initialized when not used as a bean #22988
🔨 Dependency Upgrades
- Upgrade to Reactor Dysprosium-SR12 #25730
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.1.18.RELEASE
⭐ New Features
- PropertiesLoaderSupport should ignore socket/connect exceptions as well #25720
- Avoid full singleton lock for DefaultSingletonBeanRegistry.getSingleton(beanName, false) #25695
- Possible optimization in UrlResource #25550
- Refine use of substring operations #25513
🪲 Bug Fixes
- FileUrlResource isWritable method returns true if URL protocol is not indicating a file #25739
- VerifyErrors when using SpEL compilation with Thymeleaf when invoking a default method defined in an interface #25711
- CallMetaDataContext.reconcileParameters overwrites cursor name #25708
- SQLErrorCodesFactory.getErrorCodes(DataSource) returns empty error codes if access to transactional connection fails #25692
- Make "org.springframework.util.unit.DataSize" class Serializable #25676
- Joda-Time presence check fails to detect Joda-Time 2.x specifically #25658
- Potential integer overflow in AbstractResourceBasedMessageSource.setCacheSeconds(int) #25642
- Lazy dependency proxy does not populate bean dependencies #25563
- StaticListableBeanFactory.isSingleton() returns false for singleton beans #25523
- MockHttpServletResponse reset() does not reset charset field #25510
📔 Documentation
- Document how to specify Jackson JSON view serialization hints with
@RestController
and Webflux #25704 - Prevent confusion about build(boolean) method in UriComponentsBuilder #25701
🔨 Dependency Upgrades
- Upgrade to Reactor Californium-SR21 #25731
v5.0.19.RELEASE
⭐ New Features
- PropertiesLoaderSupport should ignore socket/connect exceptions as well #25721
- Possible optimization in UrlResource #25551
- Refine use of substring operations #25514
🪲 Bug Fixes
- FileUrlResource isWritable method returns true if URL protocol is not indicating a file #25740
- VerifyErrors when using SpEL compilation with Thymeleaf when invoking a default method defined in an interface #25712
- CallMetaDataContext.reconcileParameters overwrites cursor name #25709
- SQLErrorCodesFactory.getErrorCodes(DataSource) returns empty error codes if access to transactional connection fails #25693
- Joda-Time presence check fails to detect Joda-Time 2.x specifically #25659
- Potential integer overflow in AbstractResourceBasedMessageSource.setCacheSeconds(int) #25643
- Lazy dependency proxy does not populate bean dependencies #25564
- StaticListableBeanFactory.isSingleton() returns false for singleton beans #25524
- MockHttpServletResponse reset() does not reset charset field #25511
📔 Documentation
v4.3.29.RELEASE
⭐ New Features
- PropertiesLoaderSupport should ignore socket/connect exceptions as well #25722
- Refine use of substring operations #25515
🪲 Bug Fixes
- VerifyErrors when using SpEL compilation with Thymeleaf when invoking a default method defined in an interface #25713
- SQLErrorCodesFactory.getErrorCodes(DataSource) returns empty error codes if access to transactional connection fails #25694
- Potential integer overflow in AbstractResourceBasedMessageSource.setCacheSeconds(int) #25644
- Lazy dependency proxy does not populate bean dependencies #25565
- Synchronized blocks in MethodOverrides are hurting concurrency #25549
- StaticListableBeanFactory.isSingleton() returns false for singleton beans #25525
- MockHttpServletResponse reset() does not reset charset field #25512
📔 Documentation
- Prevent confusion about build(boolean) method in UriComponentsBuilder #25703
v5.3.0-M2
⭐ New Features
- Introduce getBeanProvider variants with allowEagerInit flag #25559
- Allow to access the underlying ConnectionFactory from DatabaseClient #25521
- Optimize DefaultLifecycleProcessor::startBeans #25506
- Refactoring opportunity in HandlerExecutionChain #25500
- Support macros in crontab expressions #25471
- Introduce CronExpression #25464
- Use System.currentTimeMillis() in AbstractSockJsService #25447
- Simplified return statement #25415
- Improve UriComponents.sanitizeSource() #25401
- Use Math.min() in ExponentialBackOff #25381
- Allow auto grow for entries without default constructor in SpEL #25367
- Remove redundant Character.toLowerCase() in BeanPropertyRowMapper #25361
- Leverage spring.ignore.xml flag to avoid XmlBeanDefinitionReader #25338
- Leverage spring.ignore.xml flag to avoid SQLErrorCodeSQLExceptionTranslator #25335
- Check for valid IPv6 host in UriComponentsBuilder.fromUriString #25334
- Support use of RSocketClient #25332
- Enhance HandlerMappingIntrospector to cache parsed patterns #25312
- DefaultSubscriptionRegistry: Reduced thread contention #25298
- Support multiple Content-Language header values in MockHttpServletResponse #25281
- added possibility to extend ModelAttributeMethodArgumentResolver #25265
- WebSocketMessage's methods
fromMessage
andtoFrames
ignore Netty WebSocketFrame metadata #25099 - Support for pattern based origin cors configuration #25016
- Collect metrics during application context startup #24878
- Sort detected PersistenceExceptionTranslator beans #24644
- Constructor based bean binding should support url path variables, not only request parameters #24107
- Feature request: provide support for JSR 310 types in CronTrigger #23496
- RouterFunction does not respect path matching set in WebFluxConfigurer #23236
- Turn MethodArgumentNotValidException into subclass of BindException #23107
- Support for direct path lookups in WebFlux #22961
- ExceptionHandlerExceptionResolver should support exceptions from any handler #22619
@Scheduled
(cron = "0 0 0 ? * 5#3") is not supported #22436- Consider updating the default Hibernate dialect for MySQL databases #22326
- Spring MVC - Kotlin: Cannot bind MultipartFile in constructor [SPR-17640] #22169
- Support JSON streaming formats besides application/stream+json #21283
- Support raising exception with a custom HTTP status code #20336
- Support for the last day in month cron expression [SPR-15547] #20106
- Cron Expression validation [SPR-14933] #19500
- Cron expression with fixed weekday and fixed date may or may not lead to IllegalStateException (runaway search for next trigger) [SPR-8981] #13621
🪲 Bug Fixes
- MockHttpServletResponse's setCharacterEncoding() does not update contentType property #25536
- Bean overriding for 'taskExecutor' alias is not detected #25430
- Creating ServerRequest from MockHttpServletRequest changed behaviour 5.3.0-M1 #25353
- CaffeineCache does not support LoadingCache consistently #25173
- CronSequenceGenerator - Friday 13th issue [SPR-17036] #21574
📔 Documentation
- Use Groovy syntax highlighting in reference manual #25554
- Fix comment syntax in xml examples #25537
- Fix links in Javadoc #25448
- Fix typo in javadoc #25396
- Add logging reference documentation [SPR-17626] #22158
🔨 Dependency Upgrades
- Upgrade to Jackson 2.11.2 #25398
- Upgrade to Reactor 2020.0.0-M2 #25373
- Upgrade to RSocket 1.1 M1 #25331
- Upgrade to ASM 9.0 #24872
- Upgrade to Kotlin 1.4 RC #24171
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.2.8.RELEASE
⭐ New Features
- Defer creating logger in StandardWebSocketHandlerAdapter #25427
- MutablePropertySources will not find or remove proxied sources #25369
- Profiles should be comparable when created via Profiles.of() #25340
- Avoid re-creating RSocketRequester instance per subscriber #25330
- Hoist Class.getName() from String concatenation to dodge an issue related to profile pollution #25324
- Improve Random seed in SocketUtils #25321
- Support fragments in UriComponentsBuilder.fromHttpUrl() #25300
- Support for custom cache registration in CaffeineCacheManager #25230
- Don't get ContentCachingResponseWrapper in ShallowEtagHeaderFilter so that users can extend this wrapper #24976
- Unnecessarily alarming stack trace logged during scheduler resolution #23268
- Expose a setExceptionListener method in DefaultJmsListenerContainerFactory [SPR-17570] #22102
🪲 Bug fixes
- UriComponentsBuilder.cloneBuilder() cause sharing query parameters between builders #25423
- SimpleJdbcCall does not find stored function with PostgreSQL driver 42.2.11 #25399
- MappingJackson2HttpMessageConverter might be too specific in its Charset support #25322
- ReactorNetty websocket issue for multiple clients with different protocols #25315
- Mutating a ServerHttpRequest breaks the existing context path #25279
- ServerHttpRequest.getSslInfo() always returns null for reactor-netty HTTP/2 requests #25278
- NoRollbackFor rule causes TransactionAspectSupport to log unwarranted "exception overridden" error on WebSphere #25253
- AbstractJackson2HttpMessageConverter - Check for encoding breaks JSON to POJO de-serialization experience #25247
- The AbstractTemplateViewResolver class is not abstract #25240
- WebClient: NPE and leak in case connection is reset by server. #25216
- Oracle LOB segments holding TEMP space after executing SP using SimpleJdbcCall with SqlParameterSource #22972
- IllegalReferenceCountException happens when the operation was canceled #22594
- DefaultListableBeanFactory.getBean(Class) may throw NoSuchBeanDefinitionException when removeBeanDefinition is being called simultaneously to remove an unrelated bean #22263
📔 Documentation
- Clarify enforceInitMethod/enforceDestroyMethod default values in AbstractBeanDefinition #25402
- Improve JavaDoc for ConfigurableApplicationContext.refresh() #25380
- Fix interface and class names in examples in core-aop doc #25351
- Wording changes #25314
- Fix typo in Java example for handler class #25302
- Improve Javadoc for @value regarding supported expressions #25284
- Fix syntax in validation examples #25251
- Document exception handling limitations in TaskDecorator implementations (specifically for ThreadPoolTaskExecutor#submit) #25231
🔨 Dependency upgrades
❤️ Contributors
We’d like to thank all the contributors who worked on our current release!