Skip to content

Releases: spring-projects/spring-framework

v5.3.31

16 Nov 08:43
Compare
Choose a tag to compare

⭐ New Features

  • Log4jLog needs to re-resolve ExtendedLogger on deserialization (for compatibility with Log4J 2.21) #31583

🐞 Bug Fixes

  • MessageBuilder#createMessage should not define the payload as @Nullable #31611
  • Avoid duplicate JAR resources in PathMatchingResourcePatternResolver on MS Windows #31603
  • Spring web integration commons fileupload receives files and other parameter uploads, with a null pointer #31564
  • Function column out doesn't resolve to SqlOutParameter #31560
  • Resolve to empty MultiValueMap when no matrix variables are provided #31484
  • BeanUtils.copyProperties() consumes large amount of memory #31481
  • CGLIB BeanCopier falls back to ClassLoader.defineClass for public target #31436
  • R2DBC Connection is closed during transaction when using TransactionAwareConnectionFactoryProxy #31411
  • HibernateJpaDialect and HibernateExceptionTranslator throw SQLExceptionTranslator-provided exception instead of returning it #31410
  • NamedParameterJdbcTemplate throws unexpected exception for null query #31394
  • LazyResolutionMessage does not implement proper toString #31385
  • Illegal reflective access in ContextOverridingClassLoader.isEligibleForOverriding #31233

πŸ“” Documentation

  • Clarify documentation for @Transactional on interfaces #31401
  • Default behavior of BeanPropertyRowMapper.getColumnValue(ResultSet, int, Class) inconsistent with code #31349
  • Referencing a @Bean method in a @Configuration class' @PostConstruct method leads to circular reference #31339
  • Incorrect reference information about CGLIB supported method visibility #31311

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2020.0.38 #31584

v6.1.0-RC2

26 Oct 12:48
Compare
Choose a tag to compare
v6.1.0-RC2 Pre-release
Pre-release

⭐ New Features

  • Support ContextLoader config in @SpringJUnitConfig and @SpringJUnitWebConfig #31498
  • TypeDescriptor and ResolvableType cache in GenericTypeAwarePropertyDescriptor #31490
  • Consistent Class and array matching in ResolvableType.isAssignableFrom #31487
  • BeanDefinitionRegistryPostProcessor should declare empty default postProcessBeanFactory method #31476
  • Remove support for Protobuf 2.x and protobuf-java-format #31465
  • Refine CRaC restoration logs #31462
  • Allow repeatable writes in StreamingHttpOutputMessage #31449
  • Add support for merging two BeanRegistrationAotContribution instances #31446
  • Kotlin BeanFactory.getBean extension fails with nested generic in context #31439
  • Log warning and skip resource hint registration for classpath location patterns #31429
  • Revisit AOT support for generic constructor argument values #31420
  • Add UriBuilderFactoryArgumentResolver. #31413
  • Add Coroutines support for @Cacheable #31412
  • PartEvent API should support limiting the number of file parts #31343
  • Revise support for quoted identifiers in SimpleJdbcInsert #31208
  • When configuration class parsing fails, provide more information about the class that triggered the failure #31146
  • WebClientResponseException defaults to ISO-8859-1 #31072
  • Introduce @DisabledInAotMode in the TestContext framework #30834
  • Support TypedStringValue during AOT processing #29074
  • Support ETag generation on ResourceHttpRequestHandler #29031
  • Better error reporting for @Bean creating when bean instance has been replaced with an incompatible type #28897
  • Add Coroutines support for @EventListener #28343
  • Support "*" catch-all mappings for MockMvc Filter registrations #28041
  • Guard against ConcurrentModificationException when the response processes commitActions #27587
  • Improve ControlFlowPointcut extensibility #27187
  • Uploading a too-large file should be a 4xx client error, not a 500 Internal Server Error #27170
  • Add special handling of disconnected client errors in ExceptionHandlerExceptionResolver #26181

🐞 Bug Fixes

  • ConstructorResolver rejects a candidate if the parameter value is null #31495
  • 3.2.0-RC1: No primary or single unique constructor found for interface java.util.Set #31488
  • Can't link to Spring Framework 6.1.0 release candidate documentation #31480
  • In MockMvc tests all filters end up with empty-string filterName, breaking OncePerRequestFilter #31474
  • <mvc:annotation-driven> should not instantiate bean property values #31472
  • Graal VM native image: Substitution target for o.s.o.j.v.Target_BytecodeProvider is not loaded #31452
  • JdkClientHttpRequest does not support Content-Length 0 #31451
  • Fix typo in ClassUtils.forName() #31428
  • AOT processing fails to determine proper target for a FactoryBean that produces an array #31426
  • BeanDefinitionPropertyValueCodeGenerator#orderForConsistency expects values to be Comparable #31419
  • Conversion not applied to @RequestParam default value if used for "null after conversion" case #31336
  • HandlerMethodValidationException.Visitor incorrectly triggers other() method instead of requestParam() for @RequestParam validation errors #31329
  • AbstractApplicationContext.refresh() leaves bean resources uncleaned when SmartInitializationSingleton throws a non BeansException #28878

πŸ“” Documentation

  • Document pattern matching support in NameMatchMethodPointcut #31500
  • Fix small typo in javadoc #31455
  • Expand explanation for the "lite" bean approach #29957

πŸ”¨ Dependency Upgrades

  • Upgrade to ASM 9.6 #31431
  • Upgrade to Kotlin 1.9.20-RC2 #31494

❀️ Contributors

Thank you to all the contributors who worked on this release:

@OlgaMaciaszek, @bdshadow, @funky-eyes, @izeye, @larsgrefer, and @mmoayyed

v6.1.0-RC1

12 Oct 11:05
Compare
Choose a tag to compare
v6.1.0-RC1 Pre-release
Pre-release

⭐ New Features

  • Enforce REQUIRES_NEW for correct transaction configuration on transactional event listeners #31414
  • TestCompiler should allow to configure the Locale that renders compiler messages #31408
  • Consistent Object result declarations for JdbcClient's ResultQuerySpec #31403
  • Move ReactorResourceFactory to org.springframework.http.client package #31399
  • Prevent message resolution after context close #31397
  • Handle STOMP messages to user destination in order #31395
  • AOT bean registrations miss reflection hints on property fields #31390
  • Support Jackson's DatatypeFeature in Jackson2ObjectMapperBuilder #31380
  • Allow Filters to be initialized when they're added to MockMvc #31362
  • Use schema-based config in sql-error-codes.xml #31354
  • Optimize uses of onErrorResume() #31352
  • AOT bean registrations miss reflection hints on interfaces #31350
  • SimpleAsyncTaskScheduler should run fixed-delay tasks on scheduler thread #31334
  • Allow custom observation convention for RestClient #31325
  • MockMvcHttpClientConnector support for RequestPostProcessor hook #31298
  • Expose shouldHandle(ApplicationEvent) in ApplicationListenerMethodAdapter #31295
  • Make ReactorNettyClientRequestFactory lifecycle-aware #31281
  • Add a constructor with externally managed Reactor Netty resources to ReactorNettyClientRequestFactory #31280
  • Consistent CannotAcquireLockException translation for PostgreSQL serialization failure behind JPA #31274
  • Simplify ServerRequestExtensions.queryParamOrNull() #31264
  • Reduce nested class lookups in ClassUtils #31258
  • Print JVM restoration time in DefaultLifecycleProcessor #31252
  • ValueLoaderEntryProcessor should not be created for every call to JCacheCache#get #31250
  • Introduce initialize() method in AbstractRoutingDataSource and AbstractRoutingConnectionFactory #31248
  • Add MappingJackson2MessageConverter constructors that accept an ObjectMapper #31234
  • Eliminate synchronized block to avoid thread pinning in SingletonSupplier #31227
  • Add OuputStream BodyInserter #31184
  • SseEmitter should format a multiline String #30965
  • Suppress logging from HandlerMapping when used for Spring Security's mvcRequestMatcher #30349
  • Lenient handling of unencoded URIs in ForwardedHeaderTransformer #30137
  • Support DispatcherType.INCLUDE in DefaultServletHttpRequestHandler #30113
  • Introduce caching for functional routing #29985
  • Log CglibAopProxy errors as WARN instead of INFO #29773
  • Add CharBufferDecoder #29741
  • Provide the HttpRequest on the ClientResponse interface #28397
  • Batch update return generated keys #28132
  • Allow filters to be registered with MockMvc for particular dispatcher types #27717
  • Introduce class-level execution phases for @Sql #27285
  • Add default methods to MailSender and JavaMailSender as appropriate #23651
  • Remove all ApplicationListenerMethodAdapters on context close [SPR-17456] #21988
  • Handle STOMP messages from client session in order #21798
  • Call Lifecycle.stop() for already started beans on failed refresh [SPR-15468] #20028

🐞 Bug Fixes

  • Fix regression in JmsAccessor#setSessionAcknowledgeMode #31328
  • JdbcClient does not update KeyHolder when using positional parameters #31297
  • AOT bean registrations miss reflection hints on public methods #31293
  • DefaultFetchSpec should not buffer results in temporary list buffers #31282
  • Missing reflection hint on Publisher for bean destroy methods support #31278
  • Missing reflection hint on Eclipse FileLocator #31271
  • Missing resource hint for spring.properties #31270
  • Missing reflection hints on Kotlin classes for KotlinDetector #31269
  • Missing reflection hint on MonetaryAmount in conversion service #31266
  • Missing reflection hints for jakarta.inject classes #31259
  • ResponseBodyEmitter ignores calls to complete but remains open after JSON write error while sending #30687
  • The task in AsyncTaskExecutor throws an exception before execution, and ControllerAdvice will be called twice. #30232
  • Suppress deprecation warning for AOT-generated code that refers to a deprecated member #29597
  • Avoid duplicate ApplicationListener firing (proxy vs. target) #28322
  • JCacheCache#putIfAbsent is not atomic #21591

πŸ“” Documentation

  • Add Search in all Spring Docs #31290
  • Add missing period in RestClient documentation #31237
  • Improve wording in Javadoc for @Autowired #31235
  • Clarify ClientHttpRequestInterceptor#intercept() must close response if it throws exception after receiving the response #29751
  • Create migration guide from RestTemplate to RestClient #23269

πŸ”¨ Dependency Upgrades

  • Upgrade to Micrometer 1.12.0-RC1 #31398
  • Upgrade to Reactor 2023.0.0-RC1 #31406

❀️ Contributors

Thank you to all the contributors who worked on this release:

@JakobFels, @OnlyWick, @StellarStrategist, @aahlenst, @alidandach, @bergander, @bramhaag, @chaewon121, @ctailor2, @e-freni, @esperar, @ghainesii, @hpoettker, @izeye, @joakimmohn, @kang-hl, @kriegaex, @kzander91, @markusheiden, @mdeinum, @qpakzk, @quaff, @ralph-riedel, @runeflobakk, @rwinch, @sephiroth-j, @shin-mallang, @violetbeach, and @vpavic

v6.0.13

12 Oct 09:54
Compare
Choose a tag to compare

⭐ New Features

  • Improve diagnostics for negative repeated text count in SpEL #31342
  • Improve diagnostics when repeated text size calculation results in overflow in SpEL #31341
  • UnknownContentTypeException is not Serializable #31283
  • Reintroduce FastClass in CGLIB class names for @Configuration classes #31272

🐞 Bug Fixes

  • HibernateJpaDialect and HibernateExceptionTranslator throw SQLExceptionTranslator-provided exception instead of returning it #31409
  • AnnotationScanner scanning leads to StackOverflowError with recursive annotation #31400
  • NamedParameterJdbcTemplate throws unexpected exception for null query #31391
  • HTTP server exchange observations have incorrect UNKNOWN status tag if the client disconnected #31388
  • Breaking change from 6.0.11 to 6.0.12 if you expect query parameters in @RequestBody #31327
  • SpEL's CompoundExpression.toStringAST() omits ? for null-safe navigation #31326
  • ConcurrentLruCache no longer supports capacity = 0 #31317
  • Using R2dbc transactional and non transactional on a database connection pool will fail for Oracle. #31268
  • AOT-generated code no longer set bean class for beans created from a @Bean method #31242
  • CGLIB proxy classes are no longer cached properly #31238
  • Illegal reflective access in ContextOverridingClassLoader.isEligibleForOverriding #31232
  • Fix RuntimeHintsPredicates matching rules for public/declared elements #31224
  • MultipartParser should respect read position #31110
  • WebClient reports 'Host is not specified' for URI with hostname and port, but without scheme #31033
  • R2DBC Connection is closed during transaction when using TransactionAwareConnectionFactoryProxy #28133
  • SpEL cannot evaluate or compile expression with null-safe void method invocation #27421
  • LazyResolutionMessage does not implement proper toString #21265

πŸ“” Documentation

  • Document Kotlin declaration site variance subtleties #31370
  • Add missing conversionService field in doc example #31330
  • Clarify documentation on Spring Web MVC pattern comparison #31294
  • Improved documentation for MethodParameter#getAnnotatedElement #30397
  • Javadoc for BeanPropertyRowMapper.getColumnValue(ResultSet, int, Class) is inconsistent with code #29285
  • Referencing a @Bean method in a @Configuration class' @PostConstruct method leads to circular reference #27876
  • Incorrect reference information about CGLIB supported method visibility #25001
  • Clarify documentation for @Transactional on interfaces #23538

πŸ”¨ Dependency Upgrades

  • Upgrade to Micrometer 1.10.12 #31404
  • Upgrade to Reactor 2022.0.12 #31405

❀️ Contributors

Thank you to all the contributors who worked on this release:

@jihuayu and @wfouche

v6.1.0-M5

14 Sep 09:56
Compare
Choose a tag to compare
v6.1.0-M5 Pre-release
Pre-release

⭐ New Features

  • JdbcClient should reject a List as the parameter of the IN clause of an SQL statement when using positional parameters #31215
  • Support one-time @Scheduled tasks #31211
  • Deprecate JOptCommandLinePropertySource #31207
  • Use MergedAnnotations API directly in AnnotationBeanNameGenerator where possible #31203
  • Introduce MethodInvoker API for TestExecutionListeners #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
  • Introduce reverse methods in AOP MethodMatchers and ClassFilters #26725
  • Replace Reactive awaitSingle() usages by the Mono 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 to value in param() methods in JdbcClient #31084
  • Ensure direct @PropertySource annotations override meta-annotations #31074
  • Introduce var-args params() method in JdbcClient's StatementSpec #31070
  • Introduce overloaded methods in JdbcTestUtils that accept JdbcClient instead of JdbcOperations #31066
  • Revise JdbcTestUtils method signatures to accept JdbcOperations instead of JdbcTemplate #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() in ContentCachingRequestWrapper #30709
  • Support configuring Jetty WebSocket server parameters #30344
  • Optimize InlineMap and InlineList in SpEL #30251
  • Update Pointcuts to match getter methods by also excluding void 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(...) in ObjectUtils #29051
  • Improve toString representation of complex parameters in SimpleKey #27670
  • Propagate CoroutineContext in CoWebFilter #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 to NamedParameterJdbcTemplate in DefaultJdbcClient #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](https://github.com/spring-projects/sp...
Read more

v6.0.12

14 Sep 09:05
Compare
Choose a tag to compare

⭐ New Features

  • ArithmeticException: long overflow on @Scheduled(fixedDelay = Long.MAX_VALUE, timeUnit = TimeUnit.MINUTES) #31210
  • Polish resolveArgument method in RequestResponseBodyMethodProcessor #31175
  • Update logging level in BeanValidationBeanRegistrationAotProcessor for validation exceptions #31147
  • Skip searching of nonexistent directory in PathMatchingResourcePatternResolver #31111
  • Add @Nullable to argValue in doSetValue() in Argument[Type]PreparedStatementSetter #31086
  • Optimize whitespace checks in StringUtils #31067
  • Missing proxy hint when using a simple JPARepository #31050
  • Register an override for an existing adapter in ReactiveAdapterRegistry #31047
  • DefaultListableBeanFactory#getBeanNamesForType does not take target type into account for FactoryBean resolution #30987
  • Give spring-core access to org.jboss.vfs for VfsUtils support on WildFly #30973
  • Use readNBytes in StringHttpMessageConverter when contentLength is available #30942
  • Skip array sort when the length of array not greater than 1 #30934
  • Avoid flushing for each SseEventBuilder entry #30912
  • Make DefaultGenerationContext(DefaultGenerationContext, String) constructor protected #30895
  • Add missing @Nullable annotations in AbstractResourceResolver subclasses in Spring MVC #30893
  • Performance bottlenecks while creating scoped bean instances #30883
  • Make bean initialization deterministic for multiple @Autowired methods on same bean class #30359
  • Optimize ClassUtils#getMostSpecificMethod #30272
  • Missing native hints for Hibernate Native Query proxy #29603
  • Check exception cause for @PropertySource(ignoreResourceNotFound) support #22276
  • Align validation metadata handling in PayloadMethodArgumentResolver #21852

🐞 Bug Fixes

  • Spring Boot fails with "does not reside in the file system: manifoldclass://622488023/.../" #31216
  • WebClientResponseException.getResponseBodyAs throws exception instead of returning null for empty body #31179
  • Possible classloader leak through incomplete clearing of annotation caches #31170
  • Spring LogFactory implementation deviates from original Apache LogFactory in terms of abstract method declarations #31166
  • graalvm native image feature PreComputeFieldFeature disable all netty native transports #31141
  • Bean injection fails due to nullSafeConciseToString() invoking isEmpty() on a Map/Collection proxy #31138
  • R2DBC: Skip release connection after nested with existing transaction #31133
  • SpelExpressionParser throws IllegalStateException instead of ParseException for invalid expression #31097
  • @DynamicPropertySource in @Nested test class cannot override dynamic properties from enclosing class #31083
  • Spring Boot WebFlux validation of invalid inputs #31045
  • TransactionalApplicationListenerMethodAdapter should find @TransactionalEventListener on target class method #31034
  • ScheduledAnnotationBeanPostProcessor: graceful shutdown should not interrupt currently running jobs #31019
  • TypeBootstrapContext constructor not called in custom types with Hibernate 6 #30924
  • MethodIntrospector.selectMethods(?) fails to find methods in case of special bridge method arrangement #30906
  • Spring webflux @ModelAttribute annotated methods not working with kotlin suspend methods #30894
  • Support Kotlin Serialization custom serializers #30870
  • Test AOT processing fails if a feature name prefix is reused #30861
  • NoUniqueBeanDefinitionException should make sure beansNameFound is serializable #29753
  • Permgen memory leak due to ClassInfo caching in java.beans.Introspector on JDK 11/17 #27781
  • Model.set() Kotlin extension method does not allow null value #27115
  • Allow PropertySourcesPlaceholderConfigurer subclass to customize PropertyResolver #26761

πŸ“” Documentation

  • Fix documentation: Passing in Lists of Values for IN Clause does not work with JdbcTemplate #31228
  • Fix typo in comment in XML configuration example #31194
  • Document some non-nullable Kotlin extensions can throw NoSuchElementException #31189
  • Improve documentation on applicability of mapped interceptors with the Spring MVC config #31185
  • Add Javadoc since tags in FilePatternResourceHintsRegistrar #31174
  • Refine CORS documentation for wildcard processing #31143
  • Fix invalid type name in RSocket section of the reference documentation #31091
  • @Transactional on package-private/protected methods for class-based proxies #31057
  • Change Kotlin Any to be a nullable type in AOP refdoc examples #31015
  • Versioned redirect seems to all redirect to "current" version #31009
  • Javadoc for PathPatternParser.defaultInstance is outdated #30976
  • Clarify R2DBC ConnectionAccessor and DatabasePopulator exception declarations #30932
  • Document purpose of name attribute in @PropertySource #30195
  • Document how to configure the ApplicationEventMulticaster used by the ApplicationContext #29996
  • Document inference of destroy methods with Java config more prominently #29546
  • Revise FilePatternResourceHintsRegistrar API and improve documentation #29161
  • Document how to configure the cache infrastructure globally #28250
  • SpEL T() operator not able to locate user types with default StandardTypeLocator configuration #26253
  • Propagation REQUIRES_NEW may cause connection pool deadlock #26250
  • Modify DefaultMessageListenerContainer javadoc #25503
  • Doc: Avoid deadlock in @PostConstruct through SmartInitializingSingleton or ContextRefreshedEvent #25074
  • Document expected behavior of a method annotated with multiple @Scheduled annotations #23959...
Read more

v5.3.30

14 Sep 08:30
Compare
Choose a tag to compare

⭐ New Features

  • Optimize ClassUtils#getMostSpecificMethod #31100
  • Optimize whitespace checks in StringUtils #31069
  • Align validation metadata handling in PayloadMethodArgumentResolver #31056
  • Register an override for an existing adapter in ReactiveAdapterRegistry #31048
  • Make bean initialization deterministic for multiple @Autowired methods on same bean class #30994
  • Performance bottlenecks while creating scoped bean instances #30892

🐞 Bug Fixes

  • Possible classloader leak through incomplete clearing of annotation caches #31176
  • Spring LogFactory implementation deviates from original Apache LogFactory in terms of abstract method declarations #31167
  • Bean injection fails due to nullSafeConciseToString() invoking isEmpty() on a Map/Collection proxy #31156
  • SpelExpressionParser throws IllegalStateException instead of ParseException for invalid expression #31099
  • @DynamicPropertySource in @Nested test class cannot override dynamic properties from enclosing class #31085
  • TransactionalApplicationListenerMethodAdapter should find @TransactionalEventListener on target class method #31037
  • ScheduledAnnotationBeanPostProcessor: graceful shutdown should not interrupt currently running jobs #31020
  • Permgen memory leak due to ClassInfo caching in java.beans.Introspector on JDK 11/17 #31005
  • MethodIntrospector.selectMethods(?) fails to find methods in case of special bridge method arrangement #30907

πŸ“” Documentation

  • Fix documentation: Passing in Lists of Values for IN Clause does not work with JdbcTemplate #31229
  • Refine CORS documentation for wildcard processing #31168
  • Propagation REQUIRES_NEW may cause connection pool deadlock #31040
  • Clarify R2DBC ConnectionAccessor and DatabasePopulator exception declarations #30933
  • Doc: Avoid deadlock in @PostConstruct through SmartInitializingSingleton or ContextRefreshedEvent #30889

v6.1.0-M4

17 Aug 11:39
Compare
Choose a tag to compare
v6.1.0-M4 Pre-release
Pre-release

⭐ New Features

  • Support resource patterns in @TestPropertySource locations #31055
  • Support text blocks for inlined properties in @TestPropertySource #31053
  • @Bean method should be always allowed to override scanned class matching its return type #31052
  • Support finding repeatable annotations in AnnotatedTypeMetadata #31041
  • Fail fast if a @Bean method has a void return type #31007
  • Use Class#arrayType() where feasible #31002
  • ReactiveAdapterRegistry is not compatible with Mutiny 2 #31000
  • Avoid thread pinning in SseEmitter write operations #30996
  • Add support for property file encoding in @TestPropertySource #30982
  • Support custom properties file formats in @TestPropertySource #30981
  • Support @HttpExchange for server side handling #30980
  • Fail on error by default during test AOT processing #30977
  • Deprecate applyBeanPostProcessorsBeforeInitialization and applyBeanPostProcessorsAfterInitialization in the AutowireCapableBeanFactory interface #30974
  • Provide methods for obtaining include/exclude path patterns in MappedInterceptor #30971
  • Introduce SimpleAsyncTaskScheduler with virtual threads support (as an alternative to ThreadPoolTaskScheduler) #30956
  • Support declarative mode for data binding #30948
  • Support customizing the bind parameter name for constructor binding #30947
  • Support @RSocketExchange for responding #30936
  • Introduce JdbcClient with unified parameter capabilities (as a JDBC variant of DatabaseClient) #30931
  • Allow preferred constructor to be defined at the BeanDefinition level #30917
  • Remove obsolete native image reflection hint registration for TransactionDefinition constants #30854
  • Deprecate Constants utility and stop using it internally #30851
  • Use Long.parseLong(CharSequence,int,int,int) to avoid intermediate String creation #30710
  • Support Kotlin value class properties in SpEL #30468
  • Add observability support for JMS #30335
  • @TransactionalEventListener does not work with SimpleApplicationEventMulticaster.setTaskExecutor #30244
  • Direct autowiring of existing collection subtype bean if ApplicationContext contains beans of type T #30022
  • Clarify FactoryBean.OBJECT\_TYPE\_ATTRIBUTE supported types #29799
  • Add support for Kotlin inline/value classes in BeanUtils #28638
  • Publish event for @TransactionalEventListener with Spring WebFlux #27515
  • Introduce TransactionExecutionListener callback API #27479
  • R2DBC - DatabaseClient - Add bind method to accept an object #27282
  • Introduce RowMapper with automatic binding to fields #26594
  • Add support for Class-based mapping in DatabaseClient #26021
  • @Component not picked up by @ComponentScan if it has the same simple name as the main class #25952
  • Support custom TimeUnits in StopWatch #25803
  • @Lookup doesn't work in case of AbstractBeanFactory's cacheBeanMetadata=false #25749
  • Injection of List is inconsistent with Resource[] #24845
  • Provide guidance and better diagnostics when dependency injection makes a bean ineligible for complete post-processing #24092
  • Availability of a bean definition's resolved factory method depends upon a side-effect of getBeanNamesForType which is lost when metadata caching is disabled #23795
  • Validate afterThrowing method signature in ThrowsAdviceInterceptor #1896
  • Support resource patterns in @PropertySource locations [SPR-16785] #21325
  • Increase reusability of Validator [SPR-15314] #19877
  • Support additional file formats in ReloadableResourceBundleMessageSource #18990
  • Reactive types support for @Cacheable methods [SPR-14235] #17920
  • Support caching annotations for CompletableFuture return values [SPR-12967] #17559

🐞 Bug Fixes

  • Move ServerWebExchange Kotlin extensions to the right package #31046
  • Spring does not find all @ComponentScan or @PropertySource annotations #30941
  • 404 on static resource does not return ProblemDetail response #30930

πŸ“” Documentation

  • Document @AliasFor support in AnnotatedTypeMetadata.getAnnotationAttributes() #31042
  • Update documentation for HTTP Interface return values #30959
  • Update documentation for data binding improvements #30952
  • Use of ApplicationEventPublisher in a reactive call stack [SPR-16481] #21025

πŸ”¨ Dependency Upgrades

  • Upgrade to JUnit 5.10 #30970
  • Upgrade to Micrometer 1.12.0-M2 #30997
  • Upgrade to Reactor 2023.0.0-M2 #31014

❀️ Contributors

Thank you to all the contributors who worked on this release:

@OlgaMaciaszek, @alidandach, @devdilson, @graceyu-own, @izeye, @kilink, @plx927, and @remeio

v6.1.0-M3

19 Jul 09:05
Compare
Choose a tag to compare
v6.1.0-M3 Pre-release
Pre-release

⭐ New Features

  • Update warning log messages for SimpleAsyncTaskManager to take into account virtual thread mode #30902
  • Extract forwarded header handling out of UriComponentsBuilder #30886
  • Reduce logging for ResourceNotFoundException #30884
  • Revisit public API for MBeanExporter #30874
  • Early support for JDK 22 #30845
  • DataAccessUtils result accessors with Optional return value #27735
  • Add convert(Object, TypeDescriptor) method to ConversionService #25394
  • Revisit DataAccessException translation API #24634

🐞 Bug Fixes

  • @CachePut evaluates key before cache condition #22769
  • Topic messages are not sent when using transacted JmsTemplate in 'TransactionSynchronization.afterCommit' phase [SPR-16270] #20817

πŸ“” Documentation

  • Update javadoc to take virtual threads into account #30905

❀️ Contributors

Thank you to all the contributors who worked on this release:

@KaidosGH, @izeye, and @lgxbslgx

v6.1.0-M2

13 Jul 11:48
Compare
Choose a tag to compare
v6.1.0-M2 Pre-release
Pre-release

⭐ New Features

  • Refine the log message printed after restoration with CRaC #30876
  • Add HttpExchangeAdapter for RestClient #30869
  • Use latest version of sockjs-client in AbstractSockJsService #30848
  • ClientHttpRequestFactory based on Reactor Netty HttpClient #30835
  • Pause/resume capability for ThreadPoolTaskExecutor and ThreadPoolTaskScheduler #30831
  • Rearrange HttpHeader adapters #30823
  • Support use of MockRestServiceServer with RestClient #30821
  • Allow built ServerResponse to throw exception #30818
  • Method validation error handling by controller method parameter type #30813
  • Add RestClient Kotlin extensions #30807
  • Detect interface parameter annotations also from spring-messaging HandlerMethod #30801
  • Allows JdkClientHttpRequest.DISALLOWED_HEADERS to be customized. #30788
  • Change restore logging to info level #30775
  • Add MultipartFileArgumentResolver for HTTP interface client #30728
  • Align KeyValues of Scheduled-annotated observability with OpenTelemetry conventions #30721
  • Detect invalid transaction configuration for transactional event listeners #30679
  • Blocking execution for WebFlux controller methods #30678
  • Add a CoExchangeFilterFunction for WebClient similar to CoWebFilter #30650
  • Built-in Web Support for Method Bean Validation #30645
  • Spring MVC and WebFlux handling of method validation errors #30644
  • HttpClient based ClientHttpRequestFactory #30478
  • HTTP interface client infrastructure and adapter for RestTemplate #30117
  • Instrument Scheduled-annotated methods for observability #29883
  • Add AOT support for Kotlin constructors with optional parameters #29820
  • Introduce RestClient #29552
  • Space in integer request parameter neither triggers the default value nor generates a 400 #29550
  • Improve 404 error handling in Spring MVC #29491
  • Issue with equals(?)/hashCode() for ResolvableType.forRawClass(?) #28608
  • Introduce ModuleResource for resources loaded from a given Module #28507
  • ArrayToCollectionConverter should default to List if target type is Collection #28048
  • ResolvableType should allow to determine matching type argument for generic return type #27748
  • Parallel graceful shutdown for ThreadPoolTaskExecutor and ThreadPoolTaskScheduler #27090
  • Support target instantiation and binding via constructor in DataBinder #26721
  • Support for MultiValueMap elements in web data binding #26297
  • Add binding support to functional servlet and reactive stack #25943
  • @Scheduled methods in beans created by FactoryBeans are not cancelled #24629
  • ExecutorConfigurationSupport API refinement to control internal executor shutdown #24497
  • DataBinder using constructor parameter should use path variables #22748
  • Add JDBC SqlValue classes for arrays #1850
  • Support Kotlin parameter default values in HTTP handler methods #21139
  • Multiple TaskSchedulers to be supported with @Scheduled [SPR-16271] #20818
  • Let the DataBinder construct nested objects #20806
  • Add support to any Iterable types on PropertyAccessor #907

🐞 Bug Fixes

  • ScheduledAnnotationBeanPostProcessor fails without Reactive Streams on the classpath #30707
  • @SessionAttributes handler invoked too early if controller method execution is deferred #30337
  • Fix AbstractMessageConverter not delegating to ContentTypeResolver when message header is null #29768
  • JSON deserialization for Kotlin collections on inherited classes #24033

πŸ“” Documentation

  • Update documentation on customizing validation errors with MessageSource #30653
  • Update documentation for method validation improvements in spring-context, Spring MVC, and WebFlux #30643

πŸ”¨ Dependency Upgrades

  • Upgrade to Context Propagation 1.1.0-M3 #30882
  • Upgrade to Kotlin 1.9.0 #30719
  • Upgrade to Kotlin Coroutines 1.7.2 #30833
  • Upgrade to Micrometer 1.12.0-M1 #30872
  • Upgrade to Project CRaC 1.3.0 #30812
  • Upgrade to Reactor 2023.0.0-M1 #30856

❀️ Contributors

Thank you to all the contributors who worked on this release:

@OlgaMaciaszek, @erichaagdev, @izeye, @kooixh, @ljtfreitas, @marschall, @mdeinum, @spencergibb, and @yoshikawaa