Skip to content

Releases: spring-projects/spring-framework

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

v6.0.11

13 Jul 08:57
Compare
Choose a tag to compare

⭐ New Features

  • Reduce WARN level log output during test AOT processing #30867
  • Avoid need for reflection hints for MBeanExporter in native image #30846
  • Tolerate AnnotationUtils.isCandidateClass call with null as annotation type #30842
  • Simplify DefaultSingletonBeanRegistry.isDependent() #30839
  • Add missing @Nullable annotations in ContentDisposition.Builder #30820
  • Provide explicit support for collections, maps, and arrays in ObjectUtils.nullSafeConciseToString() #30810
  • Extend list of supported types in ObjectUtils.nullSafeConciseToString() #30805
  • Align ConcurrentMapCacheManager locking behavior with CaffeineCacheManager #30780
  • Improve logging for missing dependencies in MicrometerObservationRegistryTestExecutionListener #30747
  • Optimize KotlinReflectionParameterNameDiscoverer #30725
  • Change InvocableHandlerMethod#invokeSuspendingFunction return type to Object #30716
  • ResolvableType.hasUnresolvableGenerics() should cache its result #30713
  • Deprecate RootBeanDefinition(ResolvableType) constructor #30704
  • Reinstate dependency injection support for legacy JSR-250 @javax.annotation.Resource annotation #30695
  • Translate SQL Exception with State S0001 and Vendor Code 2628 to a Spring Exception in MSSQL 2019 #30681
  • Ensure Spring LogFactory contains all public methods from Apache LogFactory #30668
  • Infer hints required for aspects #28711
  • Improve diagnostics for CGLIB ClassLoader issues with shared classes in parent ClassLoader #25940
  • JdbcTemplate does not call handleWarnings in case of exception #23106
  • Avoid illegal reflective access in ContextOverridingClassLoader.isEligibleForOverriding #22791

🐞 Bug Fixes

  • Revert changes to toString() in FieldError #30799
  • For a prototype bean, if first-time rejected value is null, subsequent value will wrongly be null always #30794
  • Fix log level on error with @TransactionalEventListener #30776
  • ClassCastException in AbstractBeanDefinition.getBeanClassName() when getting bean multithreaded #30773
  • SerializableTypeWrapper does not consistently catch InvocationTargetException #30764
  • NPE in MvcUriComponentsBuilder with no-arg target method on interface #30756
  • ArithmeticException: long overflow on @Scheduled(fixedDelay = Long.MAX_VALUE) #30754
  • Jackson2ObjectMapperBuilder breaks when modules customizer follows modulesToInstall #30751
  • NullPointerException in reactive TransactionalOperatorImpl #30729
  • MicrometerObservationRegistryTestExecutionListener uses wrong ClassLoader to detect dependencies #30726
  • Support [package-]private init/destroy methods in AOT mode #30724
  • Package-private init/destroy methods are not always invoked #30718
  • Generic RedisKeyExpiredEvent not delivered to @EventListener anymore in 6.0.9 #30712
  • Explicit BeanDefinition#targetType is not honoured in AOT scenarios #30689
  • Spring ORM SpringBeanContainer when trying to create a bean fails with not found bean definition, and fallbacks to default hibernate bean creation #30683
  • PathResourceResolver#resolve*Internal is missing @Nullable declarations #30601
  • Code generation should only apply shortcut if the target method is not ambiguous #29278

πŸ“” Documentation

  • Update STOMP documentation with the new guidelines #30857
  • Clarify ReactiveTransactionManager exception declarations #30817
  • Doc: JdbcTransactionManager vs DataSourceTransactionManager #30802
  • Fix typo in Javadoc for BeanDefinitionDsl.kt #30798
  • Remove @Aspect for classes containing only @Pointcut declarations in reference documentation #30790
  • NestedRuntimeException javadoc not updated after implementation change #30748
  • AbstractMessageListenerContainer documentation and code disagree regarding log level #30730
  • Fix link text from "null" to "Component Classes" in Testing chapter #30714
  • Document that RowCallbackHandler can be used with NamedParameterJdbcTemplate #30705
  • Javadoc HTML tables are no longer rendered properly since upgrade to Java 17 #30701
  • Fix typo in UriUtils Javadoc #30598
  • Fix example in Javadoc for MultipartBodyBuilder #30593
  • Elaborate on ShallowEtagHeaderFilter limitations #30517
  • Document how to configure a custom LocalContainerEntityManagerFactoryBean to work with native #30498
  • Document that @Sql requires spring-jdbc and spring-tx on the classpath #30280
  • Document limitations of Servlet Filter observations #29398
  • Warn against direct usage of Servlet API in WebFlux applications #28872
  • ResultSet holdability into the View layer broken by Hibernate 5 #26557

πŸ”¨ Dependency Upgrades

  • Upgrade to micrometer-bom 1.10.9 and context-propagation 1.0.4 #30860
  • Upgrade to me.champeau.jmh 0.7.1 #30690
  • Upgrade to Reactor 2022.0.9 #30871

❀️ Contributors

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

@KSH-code, @antongub, @bnbakp0582, @cwatzl, @heoYH, @izeye, @kilink, @maartenc, @quaff, @rwinch, @valfirst, and @vbaidak

v5.3.29

13 Jul 08:17
Compare
Choose a tag to compare

⭐ New Features

  • Avoid illegal reflective access in ContextOverridingClassLoader.isEligibleForOverriding #30868
  • Improve diagnostics for CGLIB ClassLoader issues with shared classes in parent ClassLoader #30866
  • JdbcTemplate does not call handleWarnings in case of exception #30852
  • Tolerate AnnotationUtils.isCandidateClass call with null as annotation type #30843
  • Simplify DefaultSingletonBeanRegistry.isDependent() #30841
  • Provide explicit support for collections, maps, and arrays in ObjectUtils.nullSafeConciseToString() #30811
  • Extend list of supported types in ObjectUtils.nullSafeConciseToString() #30806
  • Align ConcurrentMapCacheManager locking behavior with CaffeineCacheManager #30781
  • ResolvableType.hasUnresolvableGenerics() should cache its result #30715
  • Ensure Spring LogFactory contains all public methods from Apache LogFactory #30711
  • Translate SQL Exception with State S0001 and Vendor Code 2628 to a Spring Exception in MSSQL 2019 #30682

🐞 Bug Fixes

  • For a prototype bean, if first-time rejected value is null, subsequent value will wrongly be null always #30809
  • Revert changes to toString() in FieldError #30800
  • Fix log level on error with @TransactionalEventListener #30784
  • SerializableTypeWrapper does not consistently catch InvocationTargetException #30767
  • NPE in MvcUriComponentsBuilder with no-arg target method on interface #30757
  • Jackson2ObjectMapperBuilder breaks when modules customizer follows modulesToInstall #30752
  • Spring ORM SpringBeanContainer when trying to create a bean fails with not found bean definition, and fallbacks to default hibernate bean creation #30685

πŸ“” Documentation

  • ResultSet holdability into the View layer broken by Hibernate 5 #30863
  • Clarify ReactiveTransactionManager exception declarations #30819
  • Doc: JdbcTransactionManager vs DataSourceTransactionManager #30814

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2020.0.34 #30873

v5.2.25.RELEASE

13 Jul 08:17
Compare
Choose a tag to compare

🐞 Bug Fixes

  • Reintroduce support for null SpEL expressions #30464
  • Make maximum SpEL expression length configurable #30452

v6.1.0-M1

15 Jun 12:50
Compare
Choose a tag to compare
v6.1.0-M1 Pre-release
Pre-release

⭐ New Features

  • Consistent simple value type check (including UUID treatment for data binding) #30664
  • Release shared JMS Connection when message listener container is stopped #30612
  • Property-driven onRefresh checkpoint during application context bootstrap #30606
  • Support letters other than A-Z in identifiers in SpEL expressions #30580
  • Remove System.out calls in PreComputeFieldFeature #30571
  • Have the ErrorResponse.Builder take in a custom ProblemDetail instance #30568
  • Allow setting the ProblemDetail.type via a MessageSource #30566
  • ClientHttpRequestFactory based on Jetty HttpClient #30564
  • Remove buffering in ClientHttpRequestFactory implementations #30557
  • Support JAXBElement in Jaxb2XmlEncoder #30552
  • Disable SpEL selector support in WebSocket messaging by default #30550
  • Enforce JPA bootstrap failure for incomplete Hibernate Validator setup #30549
  • Support parsing long dates in InstantFormatter #30546
  • Port BeanPropertyRowMapper and DataClassRowMapper for r2dbc #30530
  • Add non-null precondition checks in DefaultEntityResponseBuilder #30433
  • Deprecate spring-context-indexer #30431
  • Update RuntimeHintsAgentPlugin to use the native image code path #30422
  • HTTP interface client should not have blockingTimeout set and leave it to the underlying client by default #30403
  • Improve toString() for Profiles.of() implementation #30374
  • Add ReloadableResourceBundleMessageSource Resource selection hook #30369
  • Optimize DefaultLifecycleProcessor::stopBeans #30361
  • Deprecate AutowireCapableBeanFactory.createBean(Class, int, boolean) for consistent usage of createBean(Class) #30345
  • Support setCharacterEncoding(null) in MockHttpServletResponse #30341
  • Add support for converting a String to an Instant #30312
  • Refine RouterFunctionMapping ordering consistency #30278
  • CRaC Resource adapter for bean lifecycle in application context #30242
  • Configuration options for virtual threads #30241
  • Support for SequencedCollection/Set/Map #30239
  • MethodArgumentNotValidException::errorsToStringList should include only the resolved message when MessageSource is used #30198
  • Support @XmlSeeAlso in Jaxb2XmlDecoder #30167
  • Add SpEL support for registered MethodHandles #30045
  • Add test support to record async events, with JUnit Jupiter caveat #30020
  • Returning a CompletableFuture.failure() from an async, transactional method should mark the transaction as roll back #30018
  • Support @Scheduled on Reactive methods and Kotlin suspending functions #29924
  • Compatibility with JVM checkpoint restore (OpenJDK's Project CRaC) #29921
  • Validator factory methods with BiConsumer #29890
  • Spring MVC and WebFlux method validation support that also adapts ConstraintViolations #29825
  • Remove LocalVariableTableParameterNameDiscoverer #29559
  • Avoid use of java.net.URL constructors #29481
  • Creating relative resource for URL resource should create relative Resource even if relative path has URL in it #28522
  • ModelAttributeMethodArgumentResolver does not support custom field binding for immutable objects #28284
  • ConcurrentTaskScheduler and ConcurrentTaskExecutor can create an executor with no way to shut it down #27914
  • R2DBC ConnectionFactory bean .close() method should be called/subscribed when available #26991
  • org.springframework.web.servlet.mvc.method.annotation.ReactiveTypeHandler does not handle vendor-specific application/x-ndjson media types #26817
  • Improve the experience of handling validation errors in controller methods #26219
  • Compatibility with virtual threads (OpenJDK's Project Loom) #23443
  • Avoid repeated attempts to load a failing ApplicationContext in the TestContext framework [SPR-9548] #14182

🐞 Bug Fixes

  • Retain profiles used when running AOT #30421
  • Automatic context propagation stops working after an error occurs #30013

πŸ“” Documentation

  • Introduce JVM checkpoint/restore support documentation #30647
  • Fix link in Javadoc of PassThroughFilterChain #30365
  • Clarify behavior of the Elvis SpEL operator in documentation #30352
  • Fix link to releases feed #30340

πŸ”¨ Dependency Upgrades

  • Upgrade to Jackson 2.15 #30665
  • Upgrade to Kotlin 1.8 #29754
  • Upgrade to Kotlin Coroutines 1.7 #30514
  • Upgrade to Kotlin Serialization 1.5 #30515
  • Upgrade to SnakeYAML 2.0 #30048

❀️ Contributors

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

@OlgaMaciaszek, @RemusRD, @aooohan, @asomov, @izeye, @jstansel, @kzander91, @luohongtu, @making, @rwinch, and @srivatsa-cfp

v6.0.10

15 Jun 11:15
Compare
Choose a tag to compare

⭐ New Features

  • ClassLoader can be null in DeserializingConverter and should be annotated with @Nullable #30670
  • Introduce TestExecutionListener for Micrometer's ObservationRegistry in the TestContext framework #30658
  • Add missing hint for ResourceEditor #30628
  • Add missing hint for converting String to URI #30627
  • Redesign inner Pointcut implementations as standalone classes #30621
  • Add missing @Nullable in DefaultJmsListenerContainerFactory #30620
  • Handle custom JMS acknowledgment modes as client acknowledge #30619
  • Declare Advisor#isPerInstance() as default method #30614
  • Improve error message for unsupported character in SpEL expression #30602
  • Multipart data is always read irrelevant of handler response #30590
  • Performance optimization in AbstractBeanFactoryBasedTargetSource.hashCode() #30576
  • Log a warning when commons-logging is in the classpath #30575
  • Always use MethodArgumentNotValidException(MethodParameter, BindingResult) constructor #30558
  • Remove non-empty filename check in ContentDisposition builder #30537
  • Add missing EntityManagerFactory hints for SharedEntityManagerCreator #30523
  • Disable Hibernate reflection optimizer with native #30521
  • Introduce a method in MockHttpServletRequestBuilder to set remote address #30497
  • Skip class transformer in PersistenceUnitInfoDescriptor for native images #30492
  • @Bean 'lite' mode not supported if @Bean methods are not declared locally #30449
  • Align HibernateJpaVendorAdapter with Hibernate ORM 6.2 #30288
  • Add nested propagation support to R2dbcTransactionManager #30134

🐞 Bug Fixes

  • Cron expression scheduling might be triggered 1 millisecond earlier #30666
  • Change of behaviour for UUID in bean validation output in v5.3.27 #30661
  • Test context cache stats are not logged when ApplicationContext fails to load #30635
  • Inconsistent ProxyCallbackFilter#equals/hashCode methods in CglibAopProxy #30615
  • SpEL's CompoundExpression.toStringAST() incorrectly includes . for indexed properties #30610
  • NPE in ReactiveTransactionSupport.unwrapIfResourceCleanupFailure #30597
  • CollectionFactory.createMap(HashMap.class, 0) now returns a LinkedHashMap rather than a HashMap #30596
  • ThreadLocalTargetSource does not include actual target bean name in NamedThreadLocal #30581
  • ApplicationListenerMethodAdapter inconsistently publishes events from CompletableFuture #30578
  • Unsupported SQL type: TIMESTAMP_WITH_TIMEZONE when using OffsetDateTime with MySQL #30556
  • SpringBeanContainer not called with Hibernate ORM 6.2 #30545
  • WebFlux returns 406 instead of RFC 7807 response for subtype of ProblemDetail #30533
  • HTTP Interface client cannot send URI query parameter with multipart request #30520
  • Transaction isolation level not working with R2dbcTransactionManager #30508
  • Support for AOT processing with GraalVM tracing agent is not consistent #30511
  • For @Bean method that returns null, @Autowired injects NullBean instead of null for cached arguments #30485
  • MediaType property binding issue in native builds #30491
  • InjectionMetadata AOT contributions do not check for existing property value #30476
  • Spring Framework 6.0.8 appears to cause issues in OSGi environment #30389
  • Empty @RequestMapping method should match both "" and "/" consistently #30293
  • EclipseLinkJpaDialect: Unexpected default isolation levels #29997
  • Memory leak with CglibAopProxy$ProxyCallbackFilter #26266

πŸ“” Documentation

  • Fix markup issue in Javadoc of QuartzCronField #30646
  • Document @DirtiesContext semantics when declared at the class level and method level #30623
  • Add missing Javadoc for RegisteredBean.resolveAutowiredArgument() #30609
  • Fix invalid link in transaction resources #30570
  • FileSystemUtils::deleteRecursively Javadoc refers to File instead of Path #30554
  • Improve Javadoc for ExchangeFilterFunction #30543
  • Update Javadoc and reference doc for WebMvcConfigurer to mention Boot's HttpMessageConverters #30538
  • Add Javadoc since to InjectedElement.shouldInject() #30512
  • Fix wording in r2dbc Statement Filters section of ref docs #30482
  • Typo in Spring official documentation #30473
  • Link for @javax.annotation.Nonnull is wrong in Javadoc for Spring's @NonNull #30455
  • Improve how the build deals with javadoc invalid references #30428
  • Docs: Remove duplicate in SpEL feature list #30404
  • Document which @Scheduled attributes support SpEL expressions #29290

πŸ”¨ Dependency Upgrades

  • Upgrade to micrometer-bom 1.10.8 and context-propagation 1.0.3 #30657
  • Upgrade to Reactor 2022.0.8 #30655

❀️ Contributors

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

@Foolkin, @anyuruf, @galingerv, @izeye, @jmewes, @kihyuk-sung, @leewin12, @marcingrzejszczak, @rweisleder, @rwinch, @scordio, @ssang1105, and @vpavic