All Versions
53
Latest Version
Avg Release Cycle
33 days
Latest Release
840 days ago

Changelog History
Page 1

  • v5.3.2 Changes

    December 09, 2020

    🍱 ⭐ New Features

    • πŸ”§ Refine ConfigurationClassPostProcessor behavior in native images #26236
    • 🌲 Ability to correlate ByteBuf leak records to log messages for a specific request #26230
    • πŸ”§ Avoid CGLIB proxies in websocket/messaging configuration #26227
    • ContentCachingResponseWrapper should not add β€œContent-Length” when β€œTransfer-Encoding” is present #26182
    • πŸ‘ Allow customization of file extension to media type map for WebFlux static resources #26170
    • πŸ”§ Register bean definition dependencies when used via configuration class injected fields #26167
    • πŸ“‡ Print helpful information in RSocket MetadataExtractor #26130
    • βž• Add ResponseSpec#toEntityFlux overload that accepts BodyExtractor #26114
    • Wildcard is a valid Access-Control-Expose-Headers value #26113
    • ⬇️ Reduce overhead of char[] creation #26101
    • EntityManagerFactory startup failure in deferred mode is only available on first use #26093
    • βœ… @DynamicPropertySource is not supported via @NestedTestConfiguration semantics #26091
    • Introduce and() methods in MethodFilter and FieldFilter for composite filters #26063
    • Kotlin extensions for WebClient.ResponseSpec #26030
    • βœ… Validate that JUnit Jupiter test methods and lifecycle methods are not annotated with @Autowired #25966
    • βž• Add support for SSE to WebMvc.fn #25920
    • Template URI Variables with newline %0A or %0D are not matched #23252

    🍱 🐞 Bug Fixes

    • AsyncServerResponse interoperability issue with path variables #26239
    • βœ‚ Remove duplicate "property" in PropertyCacheKey.toString() #26237
    • DataBuffer Leak in Server Response #26232
    • Wrong HttpServletMapping used on INCLUDE in UrlPathHelper.skipServletPathDetermination #26216
    • 🀑 MockMvc ignores MultipartFile registrations when both files and parts are registered #26166
    • cannot resolve ServerRequest::pathVariable in nested RequestPredicate #26163
    • ConcurrentModificationException in NativeMessageHeaderAccessor#copyHeaders #26155
    • AbstractServerHttpRequest constructor breaks binary compatibility between 5.2.x and 5.3.x #26151
    • πŸ‘ Refine kotlinx.serialization support #26147
    • MimeType is no longer actually serializable #26127
    • βœ… Resttemplate throws NPE with spring-boot-starter-log4j2 within tests #26120
    • ⚑️ Update default for favorPathExtension to match Javadoc and as intended for 5.3 #26119
    • ⬆️ Spring Boot 2.4 upgrade breaks injection of Principal #26117
    • NoSuchMethodError in UrlPathHelper.skipServletPathDetermination #26112
    • πŸ‘Œ Support allowedOriginPatterns in SockJS config #26108
    • PathMatchingResourcePatternResolver fails to resolve resources from JAR located in path with '#' on JDK 11+ #26104
    • @Transactional causes casting error for suspending function on Spring MVC #26092
    • 🚚 UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26079
    • ⚑️ NamedParameterJdbcTemplate.batchUpdate does not individually apply the SQL type from each SqlParameterSource argument #26071
    • Missing error status handling for toEntityFlux methods in WebClient #26069
    • πŸš€ DataBufferUtils#join may release a DataBuffer more than necessary #26060
    • πŸ‘» FlightRecorderApplicationStartup exception on processing Http Request #26057
    • WebMvc.fn: ServerResponse.async does not handle exceptions as expected #25931
    • Non-compliant Content-Type header for multipart media types #25885
    • πŸ‘€ ResponseEntity Exception Handling Issues #25490

    πŸ“” Documentation

    • Clarify intended advice execution behavior in Spring version 5.2.7+ #26202
    • 0️⃣ DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26134
    • Spring EntityManager proxy is incompatible with Hibernate Search <5.11.6 (FullTextEntityManager instantiation fails with ClassCastException) #26090
    • Null passed in required @RequestParam now fails #26088
    • πŸ”’ Mention security consideration in ForwardedHeaderFilter javadoc #26081
    • βž• Add cron expression documentation #26067
    • ⚑️ Update javax.mail reference to jakarta.mail #25855
    • Mechanism to access request bound objects in WebClient filter in servlet env #25710
    • Document that @Transactional does not propagate to new threads #25439

    ⬆️ πŸ”¨ Dependency Upgrades

    • ⬆️ Upgrade to Kotlin Coroutines 1.4.2 #26226
    • ⬆️ Upgrade to Reactor 2020.0.2 #26176
    • ⬆️ Upgrade to Kotlin 1.4.21 #26132

    🍱 ❀️ Contributors

    πŸš€ We'd like to thank all the contributors who worked on this release!

  • v5.3.1 Changes

    November 10, 2020

    🍱 ⭐ New Features

    • πŸ”¦ Expose a public method "isClosed" to indicate whether the connection has been closed in WebSocketSession (WebFlux) #26043
    • WebFlux missing programmatic handling of MappingJacksonValue #26035
    • ⚑️ Optimize locking in AspectJProxyFactory for concurrent aspect instantiation #26034
    • ⚑️ Upgrade SpelCompiler bytecode level to 1.8 and optimize for concurrent access #26033
    • πŸ”€ MergedAnnotationCollectors.toAnnotationSet() should not create intermediate ArrayList #26031
    • SpEL doesn't work nicely with records #26029
    • πŸ”Š StompSubProtocolHandler logs failed authentication with error stack trace #26026
    • πŸ”¦ Expose toEntityFlux methods in WebClient.ResponseSpec #26023
    • πŸ‘Œ Improve AdvisedSupport.getAdvisors() #26017
    • πŸ‘Œ Improve URI/query strings sanitization #26012
    • 0️⃣ DefaultSimpUserRegistry prevents event from being published if original SimpMessageHeaderAccessor cannot be found #26010
    • 0️⃣ DefaultWebClientBuilder copies references #25992
    • Inefficient request handling inside ServletRequestDataBinder #25986
    • Avoid multiple volatile reads/writes in a row where only one is enough #25899
    • πŸ‘ Allows Jackson2 encoders to log Throwable reason for not being able to serialize or deserialize #25892
    • Mechanism to access request bound objects in WebClient filter in servlet env #25710

    🍱 🐞 Bug Fixes

    • Cannot be cast to class Publisher error with non suspending @Transactional functions #26052
    • πŸ›  Fix wrong reference in UrlPathHelper.removeSemicolonContentInternal() #26050
    • ⏱ setTaskScheduler in StompBrokerRelayRegistration breaks chaining #26049
    • βž• Add FullyQualifiedAnnotationBeanNameGenerator.INSTANCE #26025
    • Autowiring does not work reliably in case of dynamically changing prototype bean class #26019
    • βœ… Order of profiles in tests is not preserved #26004
    • βͺ @Transactional on suspending function returning a value always rollbacks #25998
    • πŸ‘€ SseEmitter: connection closed after first event #25987
    • @Nonnull annotation breaks ServletRequestMethodArgumentResolver for Principal #25981
    • Spring MVC's locale resolver can no longer be customized in parent context #25290

    πŸ“” Documentation

    • πŸ›  Fix kotlin example code which does not compile #26016
    • πŸ›  Fix a broken Asciidoctor syntax in core-resources.adoc #25999

    🍱 ❀️ Contributors

    πŸš€ We'd like to thank all the contributors who worked on this release!

  • v5.3.0 Changes

    October 27, 2020

    🍱 ⭐ New Features

    • πŸ‘ Allow cache eviction for ConcurrentLruCache #25963
    • πŸ‘Œ Support Optional for query parameters in UriBuilder and UriComponentsBuilder #25951
    • πŸ—„ Deprecate StringUtils.isEmpty(Object) and replace remaining usage (e.g. with ObjectUtils.isEmpty) #25945
    • Introduce RouterFunction attributes #25938
    • βœ… Discover @Sql, @SqlConfig, @SqlGroup, & @SqlMergeMode on enclosing class for nested test class #25913
    • πŸ‘Œ Support Propagation.NEVER for disabling test-managed transactions #25909
    • Extensible invocation of TcpClient in ReactorNettyTcpClient #25889
    • πŸ“‡ Ignore duplicate configuration metadata for cache key in the TestContext framework #25800
    • Avoid use of String's for ContentDisposition type #25647
    • πŸ”¦ Expose access to STOMP SimpleMessageBroker sessions user Principal #25191
    • πŸ‘ Allow programmatic registration of completion and error callbacks to transactional event listeners #24163
    • πŸ‘Œ Support suspending functions annotated with @Transactional #23575
    • StompBrokerRelay doesn't send heartbeats to broker when @MessageMapping handles received messages #22822

    🍱 🐞 Bug Fixes

    • βœ… @NestedTestConfiguration should not be discovered on enclosing class for nested interface #25917
    • UriComponentsBuilder controller method argument has no path #25822
    • πŸ‘Œ Support multiple matchers in MockMvc Kotlin DSL #24103

    πŸ“” Documentation

    • βœ… Document @NestedTestConfiguration support #25912
    • πŸ‘Œ Improve R2DBC DatabaseClient documentation regarding array/Collection-like bind parameters #25860
    • Document @DynamicPropertySource use cases that require @DirtiesContext #25850
    • πŸ‘‰ Use lowercase property names in SpEL examples #25538

    ⬆️ πŸ”¨ Dependency Upgrades

    • ⬆️ Upgrade to Kotlin Coroutines 1.4.0 #25969
    • ⬆️ Upgrade to RSocket 1.1.0 #25956
    • ⬆️ Upgrade to Reactor 2020.0.0 #25947
    • ⬆️ Upgrade to Gradle 6.7 #25918

    🍱 ❀️ Contributors

    πŸš€ We'd like to thank all the contributors who worked on this release!

  • v5.3.0-RC2 Changes

    October 13, 2020

    🍱 ⭐ 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
    • 0️⃣ 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

    • 0️⃣ 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 Changes

    September 15, 2020

    🍱 ⭐ New Features

    • 0️⃣ 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.3.0-M2 Changes

    August 11, 2020

    🍱 ⭐ 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
    • 0️⃣ DefaultSubscriptionRegistry: Reduced thread contention #25298
    • πŸ‘Œ Support multiple Content-Language header values in MockHttpServletResponse #25281
    • βž• added possibility to extend ModelAttributeMethodArgumentResolver #25265
    • πŸ“‡ WebSocketMessage's methods fromMessage and toFrames 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.3.0-M1 Changes

    June 25, 2020

    🍱 ⭐ New Features

    • πŸ— Use @SafeVarargs in Jackson builder and factory #25311
    • πŸ‘‰ Use JDBC 4 API for connection validation #25305
    • ⬇️ Reduce String creation in BeanPropertyRowMapper #25301
    • 0️⃣ Align DispatcherServlet defaults for Java and XML #25260
    • πŸ‘‰ Make DispatcherServlet.properties loading lazy #25257
    • βͺ Rollback reactive transaction on cancel #25256
    • πŸ‘Œ Support multi-value X-Forwarded-Prefix headers #25254
    • πŸ”¨ Refactor method name dispatching to switch statements in AutowireUtils #25199
    • 🚚 Disable and remove unsupported features from native images #25179
    • πŸ”¨ Refactor method name dispatching to switch statements #25170
    • πŸ”¨ Refactor method name dispatching to switch statements #25163
    • πŸ‘ Provide a flag to disable SpEL support #25153
    • πŸ‘ Provide a flag to disable XML support #25151
    • πŸ‘ Allow customization of JPA EntityManager before use #25125
    • πŸ‘‰ Make use of HttpServletMapping when available #25100
    • βž• Add support for R2DBC #25065
    • πŸ‘Œ Support configurable timeout in @transactional #25052
    • 0️⃣ Use same default ClassLoader in SpringFactoriesLoader #24992
    • SpringFactoriesLoader should filter out duplicates #24985
    • 0️⃣ DefaultResourceLoader's default constructor makes it easy to introduce a ClassLoader leak #24957
    • Reject "/path/**/other" patterns in PathPatternParser #24952
    • πŸ‘Œ Support for PathPatternParser in Spring MVC #24945
    • βœ… Introduce ClientHttpConnector test suite #24941
    • βž• Add file parameters as request parts in HtmlUnitRequestBuilder #24926
    • BeanNameAutoProxyCreator proxies the wrong beans when custom TargetSourceCreator specified #24915
    • πŸ”¦ Expose multipart data in ServerRequest #24909
    • πŸ”– VersionResourceResolver should use weak ETags to allow for HTTP compression #24898
    • Extend transaction attributes with labels #24890
    • Avoid using regex matching for static patterns #24887
    • βœ… Align TransactionManagementConfigurer support in TestContext framework with production #24869
    • βž• Add Encoder and Decoder for Netty ByteBuf #24866
    • πŸ‘ Allow setting SerializationInclusion with JsonInclude.Value #24824
    • πŸ‘» ObjectProvider.ifAvailable throws exception for scoped bean without an active scope #24822
    • Wrap XMLStreamException in DecodingException #24778
    • πŸ‘Œ Improve MediaType parsing performance #24769
    • βž• Add BeanPostProcessors in bulk #24756
    • ↔ Integrate Apache Http client with WebClient #24700
    • πŸ‘Œ Improve performance of AbstractAutowireCapableBeanFactory#predictBeanType #24681
    • πŸ‘Œ Improve efficiency of mutating of ClientHttpResponse and ServerHttpRequest #24680
    • πŸ‘Œ Support user-defined key type in JDBC KeyHolder #24655
    • PartsHttpMessageWriter introduced #24535
    • πŸ‘Œ Support URI templates in RequestEntity #24406
    • πŸ‘ Allow re-initialization of DataBinder to and from direct field or bean property access #24347
    • βž• Add support for metadata push to RSocketRequester #24322
    • πŸ‘Œ Support setting spring.test.constructor.autowire.mode via junit-platform.properties file #24285
    • Honor generic type information in BeanUtils.copyProperties() #24281
    • πŸ›  Fix behavior in ExceptionHandlerExceptionResolver.setResponseBodyAdvice #24204
    • πŸ‘Œ Support for RxJava 3 #24170
    • βž• Add Nullable to Joinpoint and MethodInterceptor #24117
    • DataSourceTransactionManager does not consider SQLExceptionTranslator on commit #24064
    • 0️⃣ Turn off useSuffixPatternMatching by default #23915
    • πŸ‘Œ Support matching against multiple header values in HeaderAssertions #23878
    • 🀑 Multipart request support in MockRestServiceServer #23772
    • ✨ Enhanced form data request support in MockRestServiceServer #23671
    • βž• Add support for X-Forwarded-For and Forwarded for #23582
    • @ExceptionHandler to keep nesting beyond the first cause #23380
    • πŸ‘Œ Support separate annotation introspectors in Jackson2ObjectMapperBuilder #23017
    • πŸ‘Œ Improve GraalVM native support #22968
    • Provide access to the WebSocket close status in WebFlux #22079
    • πŸ‘‰ Make WebFlux multipart support fully Reactive [SPR-17122] #21659
    • βž• Add iterable JDBC template to process large amount of data [SPR-13900] #18474

    🍱 🐞 Bug fixes

    • 0️⃣ AllEncompassingFormHttpMessageConverter now uses both JAXB and Jackson by default #25291
    • πŸ‘ Align @RequestPart support in WebFlux with Spring MVC #22973

    πŸ“” Documentation

    • πŸ›  Fix obsolete link in Kotlin docs #25192
    • Switch to googlecode theme for syntax highlighting in reference manual #24865
    • πŸ›  fix WebRequest.checkNotModified docs #1035

    ⬆️ πŸ”¨ Dependency upgrades

    • ⬆️ Upgrade to Gradle 6.5 #25180
    • ⬆️ Upgrade to Reactor 2020.0.0 M1 #25085
    • ⬆️ Upgrade to Dom4j 2.1.3 and Jaxen 1.2.0 #25078
    • ⬆️ Upgrade to Gradle 6.4 #25020
    • ⬆️ Upgrade to ASM 8.1 #24872
    • ⬆️ Upgrade to TestNG 7.1.0 #24298
    • ⬆️ Upgrade to Groovy 3.0 #24215
    • ⬆️ Upgrade to JUnit 4.13 #22894

    🍱 ❀️ Contributors

    πŸš€ We’d like to thank all the contributors who worked on our current release!

  • v5.2.12.RELEASE Changes

    December 09, 2020

    🍱 ⭐ New Features

    • ContentCachingResponseWrapper should not add β€œContent-Length” when β€œTransfer-Encoding” is present #26191
    • πŸ”§ Register bean definition dependencies when used via configuration class injected fields #26168
    • Wildcard is a valid Access-Control-Expose-Headers value #26115
    • EntityManagerFactory startup failure in deferred mode is only available on first use #26094

    🍱 🐞 Bug Fixes

    • πŸ‘» AbstractJackson2HttpMessageConverter writes partial data when exception occurs during write #26246
    • βœ‚ Remove duplicate "property" in PropertyCacheKey.toString() #26242
    • DataBuffer Leak in Server Response #26234
    • GenericConversionService$Converters.getMatchableConverters throws ConcurrentModificationException on Java 9+ #26184
    • ConcurrentModificationException in NativeMessageHeaderAccessor#copyHeaders #26158
    • MimeType is no longer actually serializable #26128
    • PathMatchingResourcePatternResolver fails to resolve resources from JAR located in path with '#' on JDK 11+ #26105
    • 🚚 UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26083
    • ⚑️ NamedParameterJdbcTemplate.batchUpdate does not individually apply the SQL type from each SqlParameterSource argument #26073
    • πŸš€ DataBufferUtils#join may release a DataBuffer more than necessary #26061

    πŸ“” Documentation

    • Clarify intended advice execution behavior in Spring version 5.2.7+ #26204
    • 0️⃣ DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26135
    • Document that @Transactional does not propagate to new threads #26102

    ⬆️ πŸ”¨ Dependency Upgrades

    • ⬆️ Upgrade to Reactor Dysprosium-SR15 #26175
  • v5.2.11.RELEASE Changes

    November 10, 2020

    🍱 ⭐ New Features

    • πŸ”Š StompSubProtocolHandler logs failed authentication with error stack trace #26037
    • πŸ”€ MergedAnnotationCollectors.toAnnotationSet() should not create intermediate ArrayList #26036
    • 0️⃣ DefaultSimpUserRegistry prevents event from being published if original SimpMessageHeaderAccessor cannot be found #26013
    • 0️⃣ DefaultWebClientBuilder copies references #25993
    • Inefficient request handling inside ServletRequestDataBinder #25990

    🍱 🐞 Bug Fixes

    • βž• Add FullyQualifiedAnnotationBeanNameGenerator.INSTANCE #26027
    • Autowiring does not work reliably in case of dynamically changing prototype bean class #26020
    • βœ… Order of profiles in tests is not preserved #26008
    • πŸ‘€ SseEmitter: connection closed after first event #25989

    πŸ“” Documentation

    • πŸ›  Fix a broken Asciidoctor syntax in core-resources.adoc #26000
  • v5.2.10.RELEASE Changes

    October 27, 2020

    🍱 ⭐ 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

    • ⬆️ Upgrade to RSocket 1.0.3 #25957
    • ⬆️ Upgrade to Reactor Dysprosium-SR13 #25946