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