⭐ New Features
JdbcClient
should reject aList
as the parameter of theIN
clause of an SQL statement when using positional parameters #31215- Support one-time
@Scheduled
tasks #31211 - Deprecate
JOptCommandLinePropertySource
#31207 - Use
MergedAnnotations
API directly inAnnotationBeanNameGenerator
where possible #31203 - Introduce
MethodInvoker
API forTestExecutionListener
s #31199 - Use
Method#isDefault
to find default methods in interfaces #31197 - Refine logic to release WebSocket ByteBuffer via Callback with Jetty 12 #31182
- Make
ReactorClientHttpConnector
lifecycle-aware #31180 - Make
ReactorResourceFactory
lifecycle-aware #31178 - Consolidate HTTP Interface client support for MultipartFile and
@RequestPart
#31164 - Register reflection hints for
@TestPropertySource
factory #31160 - Introduce TaskDecorator variant for Context Propagation #31130
- Replace Reactive
awaitSingle()
usages by theMono
variant #31127 - Clarify and log that return value of HandlerMethod is ignored if reason of
@ResponseStatus
present #31121 - Instrument RestClient for Observability #31114
- Attempt to reset Servlet response before calling ExceptionHandlers #31104
- Raise log level to warn when configuration class enhancement cannot apply due to circular reference #31102
- Refine "checkpoint on refresh" error handling #31096
- Deprecate convention-based
@Component
stereotype names in favor of@AliasFor
#31093 - Reinstate support for legacy JSR-250
@javax.annotation.ManagedBean
and JSR-330@javax.inject.Named
annotations #31090 - Look up
@Component
stereotype names using@AliasFor
semantics #31089 - Add
@Nullable
tovalue
inparam()
methods inJdbcClient
#31084 - Ensure direct
@PropertySource
annotations override meta-annotations #31074 - Introduce var-args
params()
method inJdbcClient
'sStatementSpec
#31070 - Introduce overloaded methods in
JdbcTestUtils
that acceptJdbcClient
instead ofJdbcOperations
#31066 - Revise
JdbcTestUtils
method signatures to acceptJdbcOperations
instead ofJdbcTemplate
#31065 - Adapt native support for Hibernate 6.3.0 bytecode provider changes #31051
- Move blocking writeResource operation to boundedElastic #30928
- Move blocking view resolution to boundedElastic #30903
- Support parameter injection in
@BeforeTransaction
/@AfterTransaction
methods #30736 - Introduce
getContentAsString()
inContentCachingRequestWrapper
#30709 - Support configuring Jetty WebSocket server parameters #30344
- Optimize
InlineMap
andInlineList
in SpEL #30251 - Update
Pointcuts
to match getter methods by also excludingvoid
return type #30068 - Improve attribute handling in RequestPredicates #30028
- Add support for JSR-330 and Jakarta
@Inject
for autowiring test constructors #29851 - Optimize initial size in ContentCachingRequestWrapper when contentCacheLimit set #29775
- Optimize Hibernate native footprint by making ByteBuddy unreachable #29549
- Execute preflight checks before interceptors #29509
- Use
Arrays.hashCode(...)
inObjectUtils
#29051 - Improve toString representation of complex parameters in SimpleKey #27670
- Propagate
CoroutineContext
inCoWebFilter
#27522 - Add ParameterNamesModule to "well known" jackson modules #27511
- Optimize for single TransactionSynchronization #27335
- Improve performance of
CompositePropertySource#getPropertyNames
#27236 - Avoid calling executeBatch() with 0 batch size #27154
- Add maxAttempts to ExponentialBackOff #27071
- Spring Webflux: CoRouterFunctionDsl should expose the used CoroutineContext #27010
- spring-webflux filters don't pass CoroutineContext #26977
- Support declarative
ContextCustomizer
registration in the TestContext framework #26148 - Improve SpEL inline collection caching #25921
- Use Comparable instead of dedicated implementations #25478
- Support method injection when
@Autowired
(require=false) is used on mixed nullability args #24773 - Add factory method to create a NamedThreadLocal with an initial value #24705
- CglibAopProxy: Skip non-overridden methods of Object.class as those which for sure have no advice #24649
- Add conversion support for Pattern/Regex #24311
- Support quoted identifiers in
SimpleJdbcInsert
#24013 - Add composite for TaskDecorator #23692
- Spring AOP is not compatible with Kotlin Coroutines #22462
- Added Basic Authorization for UrlResource #1822
- Allow component name to be specified in
@ControllerAdvice
[SPR-16566] #21108 - MethodValidationInterceptor support for Mono and Flux method parameters #20781
- Support validating collection of objects on web controller method #16917
🐞 Bug Fixes
- AOT check on a bean definition with an instance supplier is not consistent #31200
- Pass correct
SqlParameterSource
toNamedParameterJdbcTemplate
inDefaultJdbcClient
#31195 - Various methods in
SimpleJdbcInsert
prevent method chaining #31177 - Client observations URI template missing when using RestTemplateAdapter #31144
- Validator resolution can no longer be lazy #31137
- Make the JdbcClient method update(KeyHolder generatedKeyHolder) work with positional parameters #31122
- AOT processing fails for
@ConfigurationProperties
class without default constructor #31117 - Built-in method validation does not work with Boot auto-configuration #31082
📔 Documentation
- Stop referring to JDO and outdated JDBC versions in documentation #31183
- WebFlux blocking configuration documentation fix #31150
- typo in "such as" #31145
- Fix typo in reference documentation #31135
- Document
RestClient
in the reference manual #30826 - Add example of buffering with WebClient to the reference documentation #28758
🔨 Dependency Upgrades
- Upgrade to Context Propagation 1.1.0-M4 #31220
- Upgrade to CRaC 1.4.0 #31190
- Upgrade to Jetty 12 #30698
- Upgrade to Kotlin 1.9.10 #31106
- Upgrade to Kotlin Coroutines 1.7.3 #31108
- Upgrade to Kotlin Serialization 1.6.0 #31107
- Upgrade to Micrometer 1.12.0-M3 #31218
- Upgrade to Reactor 2023.0.0-M3 #31219
❤️ Contributors
Thank you to all the contributors who worked on this release:
@70825, @Anton-Vasilev, @Arooba-git, @FlorianLehmann, @Li0n13, @Sam-Kruglov, @SammyVimes, @Shawyeok, @TAKETODAY, @alecmus, @annabuyevich, @aooohan, @asgh, @bdshadow, @chenqimiao, @enimiste, @garyrussell, @hzmpay, @izeye, @kilink, @kitaisreal, @liaozan, @making, @marschall, @mdeinum, @midumitrescu, @quaff, @rwinch, @ryanrupp, @stsypanov, @tianshuang, @ttddyy, @valfirst, @wind57, @x-x-z, and @yuzawa-san