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