Skip to content

Releases: spring-projects/spring-framework

v6.1.2

14 Dec 11:16
Compare
Choose a tag to compare

⭐ New Features

  • Optimize ContentCachingRequestWrapper allocation for known request size #31834
  • Inherit parent context in coRouter DSL #31831
  • Declare isStatic and releaseTarget as default methods on TargetSource #31820
  • Delegation support for JDBC 4.3 ConnectionBuilder and ShardingKeyBuilder #31795
  • Support for a read-only DataSource in LazyConnectionDataSourceProxy #31785
  • Add MySQLIdentityColumnMaxValueIncrementer #31784
  • Introduce overloaded MockPart constructor that accepts the Content-Type #31757
  • Introduce toString(Charset) in FastByteArrayOutputStream #31737
  • Avoid byte array copy in getContentAsString #31731
  • Improve "active" metrics handling in WebClient observations #31702
  • Make ResourceArrayPropertyEditor supports comma delimited location patterns #31700
  • Consistently log exceptions from TestExecutionListeners at WARN level #31688
  • Document need for -parameters flag in exception messages #31675
  • Improve @RegisterReflectionForBinding for enums #31570
  • Support direct shard database operation routing in Spring JDBC #31506
  • Log test aborted/skipped exceptions at INFO level in the TestContext framework #31479
  • Avoid double proxying for @Resource @Lazy fallback autowiring #31447
  • Add support for tuning the code generation for bean property values #31427
  • Avoid race condition in ConcurrentReferenceHashMap #31008
  • Allow functional bean registration to set bean order (equivalent to @Order) #30849
  • Allow AOT generated classes to be excluded from code analyzer tools #30824
  • Error page does not utilize forwarded prefix #30828
  • Fix SimpleJdbcCall named parameter binding for Sybase ASE #30231
  • DefaultWebClient ignores baseUrl when setting URI_TEMPLATE_ATTRIBUTE #30027
  • Avoid eager checkDefaultConnectionProperties call in LazyConnectionDataSourceProxy #29931
  • Allow TransactionAwareDataSourceProxy to eagerly fetch the connection #29423
  • Extract common value generator out of BeanDefinitionPropertyValueCodeGenerator #28999
  • PostgresCallMetaDataProvider should detect current schema as indicated by the JDBC Connection #28723
  • Implement setMaxTextMessageSize and setMaxBinaryMessageSize in JettyWebSocketSession #28325
  • Optimize cache used in AutowiredAnnotationBeanPostProcessor #28293
  • @Async aspect should clear cached executors when different BeanFactory set #28201
  • Component scanning should be able to ignore encrypted classes with invalid class version #27691
  • Property to control URL decoding in ServletCookieValueMethodArgumentResolver #26989
  • Support Predicate- based mappedHandler config in AbstractHandlerExceptionResolver #26772
  • SimpleJdbcCall with namedBinding=true for MS SQL Server #26072
  • Improve default setNull performance on PostgreSQL and MS SQL Server (e.g. for NamedParameterJdbcTemplate batch updates) #25679

🐞 Bug Fixes

  • <replaced-method /> unnecessarily requires explicit arg-type since 6.0 #31826
  • Avoid nested constructor data binding if there are no request parameters #31821
  • Custom Init or Destroy method from an interface cannot be invoked in a native image #31819
  • Avoid potential refresh deadlock with AbstractApplicationContext#registerShutdownHook #31811
  • Classes proxied by CGLIB produces NPE with coroutine async job on Springboot 3.2.0 #31809
  • Fix Comparators.nullsLow and Comporators.nullsHigh behavior #31808
  • MergedAnnotations finds duplicate annotations on method in multi-level interface hierarchy #31803
  • Pickup coroutineContext saved by CoWebFilter in coRouter #31793
  • Support for multiple CoWebFilters that change CoroutineContext #31792
  • TestCompiler should not discover annotation processors on the classpath by default #31791
  • @Cacheable key generator is called after invoking the cached method in case of a miss #31789
  • Encountered NotSerializableException for HttpComponentsHeadersAdapter when serializing HttpClientErrorException #31787
  • Exclude Part from nested constructor binding in WebFlux #31778
  • Fix condition for "Too many elements" in MimeTypeUtils.sortBySpecificity() #31769
  • AnnotatedTypeMetadata's getMergedRepeatableAnnotationAttributes() method ignores classValuesAsString #31768
  • SimpleAsyncTaskScheduler: task with fixed delay stops working after unhandled exception #31749
  • Spring unable to decode aggregated JSON content #31747
  • cannot resolve ServerRequest::pathVariable in nested RequestPredicate again #31732
  • @NotNull on JPA entity not respected in schema generation #31726
  • @Cacheable throws NullPointerException when encountering cached null value for empty Mono #31722
  • RestClient ResponseSpec.body() throws an exception instead of returning null if no response body is available #31719
  • UrlResource getFilename() suddenly returns null for certain paths #31718
  • DisconnectedClientHelper is missing "AbortedException" #31717
  • Constructor binding fails for Duration argument if request parameter is not present #31709
  • TraceId is missing in WebFlux controller handlers #31706
  • Wrong observation status tag when a Not Found in a webflux application #31703
  • Correct conversion from Resource[] with length 1 to Collection #31699
  • @ComponentScan added directly and via a meta-annotation leads to multiple scanning #31704
  • Unable to use kotlin value classes as function arguments to functions mapping web endpoints #31698
  • @DisabledInAotMode does not work in native image #31705
  • GenericTypeResolver does not resolve nested generics - causes...
Read more

v6.0.15

14 Dec 09:19
Compare
Choose a tag to compare

⭐ New Features

  • Skip buffer allocation in StreamUtils.copy(String) #31631

🐞 Bug Fixes

  • <replaced-method /> unnecessarily requires explicit arg-type since 6.0 #31828
  • MergedAnnotations finds duplicate annotations on method in multi-level interface hierarchy #31824
  • Fix condition for "Too many elements" in MimeTypeUtils.sortBySpecificity() #31773
  • Spring unable to decode aggregated JSON content #31772
  • Multipart messages with empty parts are not correctly parsed in WebFlux #31766
  • PathEditor cannot handle absolute Windows paths with forward slashes #31727
  • TraceId is missing in WebFlux controller handlers #31716
  • Wrong observation status tag when a Not Found in a webflux application #31715
  • Fail to register MBean with bean name containing invalid character #31708
  • Include Hibernate's Query.scroll() in SharedEntityManagerCreator's queryTerminatingMethods set #31683
  • TypeDescriptor does not check generics in equals method (for ConversionService caching) #31673
  • SpEL expression on a reloadable type can no longer be resolved #31670
  • Slow SpEL performance due to method sorting in ReflectiveMethodResolver #31664
  • Jackson encoder releases resources in wrong order #31656
  • Current Observation.Context missing from WebClient request #31646
  • WebSocketMessageBrokerStats has null stats for stompSubProtocolHandler since 5.3.2 #31641
  • <jee:local-slsb> no longer works with a business-interface attribute #31630
  • GeneratedFiles#addSourceFile should not allow to add a source in the default package #31629
  • PathResourceResolver.getResource() does not log warning if Resource#getURL() throws exception #31624

📔 Documentation

  • Document explicit @ModelAttribute is required for reflection hints inference #31767
  • Documentation needs to be updated with instructions for STOMP Client #31678
  • Improve STOMP WebSocket documentation for input message buffer size #31654

🔨 Dependency Upgrades

  • Upgrade to Reactor 2022.0.14 #31815

v6.1.1

23 Nov 09:25
Compare
Choose a tag to compare

⭐ New Features

  • Skip buffer allocation in StreamUtils.copy(String) #31621
  • Caching and Event Listening support do not reuse internal delegates for their evaluation contexts #31617
  • Java 17: resource.isReadable() with concurrency leaks large amounts of non-heap memory #30955

🐞 Bug Fixes

  • Spring MVC: Unexpected bytes added to the HTTP response for kotlin.Unit return type in controller methods #31648
  • Spring Data Redis Cache implementation is not compatible with Cache.retrieve(key) semantics #31637
  • GeneratedFiles#addSourceFile should not allow to add a source in the default package #31628
  • <jee:local-slsb> no longer works with a business-interface attribute #31627
  • Non-blocking @Cacheable method does not support condition with #result #31626
  • PathResourceResolver.getResource() does not log warning if Resource#getURL() throws exception #31623
  • Jackson encoder releases resources in wrong order #30493
  • WebSocketMessageBrokerStats has null stats for stompSubProtocolHandler since 5.3.2 #26536

📔 Documentation

  • Fix links related to Spring WebFlux #31632
  • Extract recurring asciidoc links to attributes #31619
  • Improve STOMP WebSocket documentation for input message buffer size #31616
  • Document support for AppCDS #31497

❤️ Contributors

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

@7fantasy7, @Star-ho, and @quaff

v6.1.0

16 Nov 14:54
Compare
Choose a tag to compare

⭐ New Features

  • When using Oracle, JdbcClient.update(KeyHolder) does not work without explicit key column names #31607
  • Introduce way to convert ClientHttpResponse to desired type #31597
  • Property-driven onRefresh exit for AppCDS purpose #31595
  • No Micrometer traceId in JMS listener container errorHandler #31559
  • Register Hibernate @EmbeddableInstantiators registered on JPA embeddables for reflection #31534
  • Improve method validation support for errors on elements within a container #31530
  • Support pattern matching for method names in ControlFlowPointcut #31435
  • Review reachability metadata contributions after GraalVM changes #31213
  • handleEmptyBody of RequestBodyAdvice should apply also when content-type is not set #30522

🐞 Bug Fixes

  • Regression with @EnableJpaAuditing using Spring Boot 3.2-RC2 in native image #31575
  • Retrieving the response body as a List of POJOs fails with RestClient but passes with WebTestClient #31574
  • ExecutorLifecycleDelegate should call ExecutorService.isTerminated() in ?.isRunning() #31549
  • RestTemplate POST to endpoint using Digest Auth no longer works in 6.1 #31516
  • Code generation for constructor arguments must cast null indexed argument value #31508
  • \n in form model when using Jetty 12 client and multipart/form-data #31361
  • Add status handler to recognize unknown status codes outside of 4xx/5? #31202

📔 Documentation

  • Document how to log @Sql scripts and statements #31589
  • Link to KDoc API documentation from Javadoc overview #31587
  • Fix link in Javadoc of ConfigurableMockMvcBuilder #31542
  • Add note about @[Enabled|Disabled]InNativeImage in reference manual #31438
  • Document @DisabledInAotMode in the reference manual #31437
  • Document @Sql class-level execution phase support in the reference manual #31377
  • Document that Micrometer's "error" tag should be preferred vs. legacy "exception" tag #31514

🔨 Dependency Upgrades

  • Upgrade to Context Propagation 1.1.0 #31599
  • Upgrade to Kotlin 1.9.20 #31539
  • Upgrade to Micrometer 1.12.0 #31556
  • Upgrade to Reactor 2023.0.0 #31557

❤️ Contributors

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

@Young-Zen, @duesenklipper, @izeye, @k-seth, and @wakingrufus

v6.0.14

16 Nov 14:30
Compare
Choose a tag to compare

⭐ New Features

  • Provide caching for HandlerMappingIntrospector lookups #31588
  • Log4jLog needs to re-resolve ExtendedLogger on deserialization (for compatibility with Log4J 2.21) #31582
  • Optimize StandardTypeLocator for hotspot when the same classes are resolved #31579
  • Add duplicate key exception error code for SAP HANA database #31554
  • Do not delegate TRACE to HttpServlet on ERROR dispatch #31457
  • Add properties setter to ProblemDetail #31430

🐞 Bug Fixes

  • GeneratedFiles#addSource does not provide proper context if the specified class name is invalid #31612
  • MessageBuilder#createMessage should not define the payload as @Nullable #31610
  • Default Mixin added by Jackson2ObjectMapperBuilder are missing required runtime hints #31606
  • NettyDataBuffer#toByteBuffer fails if readPosition > 0 #31605
  • Avoid duplicate JAR resources in PathMatchingResourcePatternResolver on MS Windows #31598
  • NamedParameterUtils broken parsing related to square brackets #31596
  • Multipart cleanup is done too eagerly #31567
  • Jakarta validation field constraints in superclass are ignored in native image #31552
  • Function column out doesn't resolve to SqlOutParameter #31550
  • Restore support for recursive annotations in Kotlin #31518
  • Resolve to empty MultiValueMap when no matrix variables are provided #31483
  • ProxyFactoryBean declaration may lead to unexpected non-fatal "FactoryBean threw exception from getObjectType" stacktrace output #31473
  • Use of @Value in compact constructor of a record should not register method injection #31433
  • Prevent duplicate HTTP server observations for cancelled exchanges #31417
  • Spring MVC raises MissingPathVariableException resulting in 500 instead of 400 error when path segment is u001F or u00D and cannot be converted to target type UUID #31382
  • Ensure consistent value count in ConcurrentReferenceHashMap#Segment #31373
  • HeaderContentNegotiationStrategy.resolveMediaTypes throws unexpected IllegalArgumentException #31254
  • Session Cookie in Reactive WebSession is not deleted if maxAge is set through cookie initializer (e.g. via Boot application property) #31214
  • DefaultWebClient logs URI without the port number #30519
  • CGLIB BeanCopier falls back to ClassLoader.defineClass for public target #28699
  • BeanUtils.copyProperties() consumes large amount of memory #27246

📔 Documentation

  • RestTemplate initialization documentation in 6.0.x mentions Netty, yet no ClientHttpRequestFactory is present in the package. #31526
  • Correct typo in annotations.adoc #31519
  • Document X-Forwarded-* Headers #31491
  • Improve support and documentation for the "default" bean definition profile name #29071
  • Document that pertypewithin is supported by Spring AOP #25887
  • Document alternatives of using multiple PropertyPlaceholderConfigurers [SPR-9989] #14623

🔨 Dependency Upgrades

  • Upgrade to Micrometer 1.10.13 #31586
  • Upgrade to Reactor 2022.0.13 #31585

❤️ Contributors

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

@CrotchBurnt, @GVictorG7, @PiotrFLEURY, @baratrax, @bernie-schelberg-invicara, @huyachigege, @izeye, @lorenzsimon, @martin-lukas, and @rwinch

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