Skip to content

Releases: spring-projects/spring-framework

v5.2.10.RELEASE

27 Oct 14:24
Compare
Choose a tag to compare

⭐ New Features

  • Optimize Jackson resource management in codecs #25910
  • Avoid creation of unused logger instance in AbstractMediaTypeExpression #25901
  • Native Hibernate 5 bootstrapping with JTA transaction manager requires hibernate.transaction.coordinator_class=jta to be set #25858
  • Cannot test @RequestPart multipart controllers with Servlet MockPart #25829
  • Add MariaDB to the supported database products for procedures and functions #25811
  • Optimize String argument resolution in MessageTag #25809
  • Avoid repeated Charset resolution in MimeType #25808

🪲 Bug Fixes

  • Incorrect http response for a request using the Range header for pre-compressed resources #25976
  • @ActiveProfiles with same profiles but different order results in duplicate ApplicationContext #25973
  • LinkedMultiValueMap downstream issue with MultiValueMapAdapter package private base class #25960
  • DataBufferUtils.CompositeMatcher causes poor performance when one or more matchers does not match #25915
  • HttpSeverOperations overrides content-length to 0 on HTTP HEAD #25908
  • jsessionid breaks request mappings when removeSemicolonContent is turned off #25864
  • JettyClientHttpConnector triggers early cancellation #25849
  • Race condition in DataBufferUtils.readAsynchronousFileChannel resulting in FD leak (Channel remains open) #25831
  • SimpMessagingTemplate.convertAndSend results in UnsupportedOperationException when Spring Cloud Sleuth is present #25821
  • ClassCastException when wiring bean using method injection (NullBean instead of 'null') #25806
  • Thread-scoped bean creation freezes if dependent bean is retrieved before dependency bean #25801
  • Sending an event as part of the EMF lock triggers a deadlock #25799
  • Wrong type inference in Kotlin while overriding RequestMappingHandlerMapping#getMappingForMethod #25657
  • SseEmitter (ResponseBodyEmitter) keeps collecting messages if not initialized #25442

📔 Documentation

  • Correct DispatcherServlet initialization sample webmvc.adoc #25965
  • Document that TransactionalEventListener only works with non-reactive transactions #25805
  • Published reference documentation contains unnecessary folders and files #25783
  • Incorrect example in javadocs of Assert.notNull(object, messageSupplier) #25774

🔨 Dependency Upgrades

  • Upgrade to RSocket 1.0.3 #25957
  • Upgrade to Reactor Dysprosium-SR13 #25946

v5.1.19.RELEASE

27 Oct 13:59
Compare
Choose a tag to compare

⭐ New Features

  • Optimize String argument resolution in MessageTag #25923
  • Avoid creation of unused logger instance in AbstractMediaTypeExpression #25902
  • Cannot test @RequestPart multipart controllers with Servlet MockPart #25894
  • Native Hibernate 5 bootstrapping with JTA transaction manager requires hibernate.transaction.coordinator_class=jta to be set #25862
  • Add MariaDB to the supported database products for procedures and functions #25812

🪲 Bug Fixes

  • Incorrect http response for a request using the Range header for pre-compressed resources #25979
  • @ActiveProfiles with same profiles but different order results in duplicate ApplicationContext #25974
  • LinkedMultiValueMap downstream issue with MultiValueMapAdapter package private base class #25961
  • jsessionid breaks request mappings when removeSemicolonContent is turned off #25867
  • SimpMessagingTemplate.convertAndSend results in UnsupportedOperationException when Spring Cloud Sleuth is present #25835
  • Wrong type inference in Kotlin while overriding RequestMappingHandlerMapping#getMappingForMethod #25818
  • ClassCastException when wiring bean using method injection (NullBean instead of 'null') #25807

📔 Documentation

  • Published reference documentation contains unnecessary folders and files #25794
  • Incorrect example in javadocs of Assert.notNull(object, messageSupplier) #25775

🔨 Dependency Upgrades

  • Upgrade to Reactor Californium-SR22 #25948

v5.3.0-RC2

13 Oct 14:44
Compare
Choose a tag to compare
v5.3.0-RC2 Pre-release
Pre-release

⭐ New Features

  • Compatibility with Jackson 2.12 #25907
  • Loggers apparently constructed on a per HTTP request basis in reactive web code cause CPU overhead #25900
  • @ControllerAdvice order defined via @Order on a @Bean method is not applied #25872
  • Add missing awaitBodilessEntity and createExceptionAndAwait ClientResponse extensions #25866
  • Add Dependencies Manifest Entry to spring-core #25852
  • Subclasses of UrlBasedViewResolver could avoid reflection when creating instances of View #25847
  • Add option to disable Last-Modified handling when serving static resources #25845
  • FormHttpMessageConverter to preserve parameters from the input MediaType #25839
  • Request data binding fails for params with an empty array "[]" suffix #25836
  • Support for an async determination of status and headers with a WebMvc HandlerFunction #25828
  • Deprecate LiveBeansView #25820
  • MultipartFile[] required controller param, not throwing exception #25819
  • Optimize StringUtils trimLeading/Trailing methods #25810
  • Set the sameSite cookie attribute in ClientHttpResponse implementations #25785
  • Unable to change Clock for spring framework scheduling #25782
  • Resolve Principal argument only when not annotated #25780
  • Use the function endpoint, filter the handler function, and find that remoteAddress is null, params is empty #25776
  • Add kotlinx.serialization JSON support to Spring WebFlux #25771
  • Make path pattern optional in router functions #25752
  • Deprecate WebClient#exchange() and provide safer alternatives #25751
  • Easing the application of CORS default settings through the WebMvcConfigurer#corsConfigurer method #25716
  • Empty or blank required UUID header validation results in 200 response status #23939
  • Support suspending handler methods in Spring MVC #23611
  • Introduce Converter.andThen(...) #23379
  • Remove inefficiency in HttpStatus.series() #22366
  • Provide Gson/JSON-B MessageConverter for spring-messaging (aligned with spring-web) #21496
  • Discover test configuration on enclosing class for nested test class [SPR-15366] #19930

🪲 Bug Fixes

  • WebTestClient no longer captures the URI template #25854
  • Webflux Routing DSL's onError filters execute in unexpected order #25541
  • TransactionalOperator.executeAndAwait returns value too early #25007

📔 Documentation

  • Document DefaultPartHttpMessageReader #25827
  • Update WebFlux documentation with regards to logging appenders #25547
  • Upgrade to Asciidoctor Gradle plugin 3.x #24991

🔨 Dependency Upgrades

  • Upgrade to Kotlin Coroutines 1.4.0-M1 #25914
  • Upgrade to RSocket 1.1.0-RC1 #25898
  • Upgrade to Reactor 2020.0.0-RC2 #25884
  • Upgrade to Kotlin 1.4.10 #25779

❤️ Contributors

We'd like to thank all the contributors who worked on this release!

v5.3.0-RC1

15 Sep 14:48
Compare
Choose a tag to compare
v5.3.0-RC1 Pre-release
Pre-release

⭐ New Features

  • MimeMessageHelper should not encode attachment filenames by default #25770
  • A beforeCommit chain failure invariably results in a 500 response #25753
  • Improve performance of JdkDynamicAopProxy.getProxy(ClassLoader) #25660
  • Add URI variables to request context in AbstractUrlHandlerMapping (reactive) #25648
  • Public method in RSocketMessageHandler to register any handler method #25639
  • Allow early decoration of request and response in WebFlux #25633
  • Spring Test: Methods should allow supertypes of Matcher using lower bounded wildcards #25610
  • WebSocket configuration doesn't work properly with the buffer size limitation #25581
  • Declare interfaces as @FunctionalInterface where feasible #25580
  • Call StartupStep.end in finally block #25572
  • Support filename hint for client side use of ResourceDecoder #25516
  • No way to set timeout for the requests when using Jetty reactive httpclient #25493
  • Mime type "application/*" is not compatible with "application/vnd+json" #25350
  • Avoid resizing of fixed-size HashMap #25349
  • Support RSocket Load Balancing #25333
  • WebClient HTTP Request Timeout #25115
  • Support a RowMapper<T> for Java record classes #24695
  • Data binding for Java record classes #24391
  • Failure to bind a component of a form backing object using constructor binding causes the object to be null #24372
  • Concurrent access to ParsedSql cache in NamedParameterJdbcTemplate #24197
  • WebClient: wrap connection exceptions #23842
  • Extract MimeTypeUtils.ConcurrentLruCache and make it public #22789
  • WebSocket support with @EnableWebFlux #22587
  • Add kotlinx.serialization JSON support to Spring MVC #21188
  • Common API for MockMvc tests and for real HTTP tests #19647

🪲 Bug Fixes

  • Upgrading from Boot 2.3.3 or 2.4-M1 to Boot 2.4-M2 uses 125mb heap in BitsCronField #25687
  • Copy httpHandlerDecorator in copy constructor for WebHttpHandlerBuilder #25656
  • MockMvc does not correctly initialize the request for non-file mock Part uploads #25602
  • WebFlux application server add server.forward- Headers - Strategy = Framework RouterFunction endpoint 404 #25270

📔 Documentation

  • Fix typo in Regular Expression Pointcuts docs #25767
  • Fix typo regarding Ordered interface in core-aop.adoc #25759
  • Fix typo in websocket.adoc #25630
  • Eliminate unnecessary word in core-bean.adoc that causes repetition #25585
  • Publish documentation under reference/html folder #25071

🔨 Dependency Upgrades

  • Upgrade to RSocket 1.1 M2 #25729
  • Upgrade to Reactor 2020 RC1 #25728
  • Upgrade to Kotlin 1.4.0 #25617
  • Upgrade to Gradle 6.6 #25578
  • Upgrade to JUnit 5.7 #25527

❤️ Contributors

We'd like to thank all the contributors who worked on this release!

v5.2.9.RELEASE

15 Sep 08:58
Compare
Choose a tag to compare

⭐ New Features

  • HttpHeaders.setContentDispositionFormData should ignore empty filename #25769
  • StringDecoder does not provide a way to configure the default charset #25762
  • MimeMessageHelper.addAttachment: configurable encoding of attachment filename #25755
  • Current log level not checked by LogAccessor supplier-enabled logging methods #25741
  • PropertiesLoaderSupport should ignore socket/connect exceptions as well #25717
  • Avoid repeated calls to getPathWithinApplication from UrlPathHelper.getLookupPathForRequest #25669
  • Avoid full singleton lock for DefaultSingletonBeanRegistry.getSingleton(beanName, false) #25667
  • XStreamMarshaller should avoid direct use of CompositeClassLoader which is not exported by XStream in OSGi #25662
  • Avoid LinkedList performance issues through use of ArrayDeque #25652
  • Introduce createContext() factory method in AbstractGenericContextLoader #25600
  • Declare MessagePostProcessor as a @FunctionalInterface #25571
  • Assert preconditions for MergedAnnotations.from() factory methods #25568
  • Provide access to AbstractRoutingDataSource's resolved target DataSources #25544
  • Possible optimization in UrlResource #25531
  • Refine use of substring operations #25445
  • Cache abstraction does not log hit / miss for synchronized access #25248

🪲 Bug Fixes

  • Issue with Forwarded Header and Multiple Values #25737
  • CallMetaDataContext.reconcileParameters overwrites cursor name #25707
  • VerifyErrors when using SpEL compilation with Thymeleaf when invoking a default method defined in an interface #25706
  • SQLErrorCodesFactory.getErrorCodes(DataSource) returns empty error codes if access to transactional connection fails #25681
  • Make "org.springframework.util.unit.DataSize" class Serializable #25675
  • Joda-Time presence check fails to detect Joda-Time 2.x specifically #25655
  • Regression in SimpleThreadScope introduced in 5.2.7 #25618
  • Potential integer overflow in ExecutorConfigurationSupport.setAwaitTerminationSeconds(int) and AbstractResourceBasedMessageSource.setCacheSeconds(int) #25613
  • Remove session on 4xx response from WebSocket handshake #25608
  • spring-jdbc don't set out parameter name from metadata for Postgresql function after issue#25399 #25588
  • FileUrlResource isWritable method returns true if URL protocol is not indicating a file #25584
  • Lazy dependency proxy does not populate bean dependencies #25562
  • Bean creation fails with StackOverflowError after upgrading from 5.1.13 to 5.2.7 #25546
  • StaticListableBeanFactory.isSingleton() returns false for singleton beans #25522
  • Standalone MockMvc ignores @RestControllerAdvice annotation attributes #25520
  • MockHttpServletResponse reset() does not reset charset field #25501
  • AnnotationTypeMappings does not filter repeatable annotations #25483
  • Wrong error message for type mismatch in jsonPath().value() #25480
  • Fix infinite loop bug in AnnotationScanner #25429
  • Overloaded @Bean method with name mismatch causes bean to be created twice (in case of ASM processing) #25263

📔 Documentation

  • Prevent confusion about build(boolean) method in UriComponentsBuilder #25604
  • Document how to specify Jackson JSON view serialization hints with @RestController and Webflux #25596
  • Inconsistent log level in @Bean javadoc and ConfigurationClassEnhancer #25590
  • Fix asciidoctor syntax for source #25539
  • Improve Javadoc for @RequestMapping#params #25482
  • Document that SimpleCacheManager requires caches to be initialized when not used as a bean #22988

🔨 Dependency Upgrades

  • Upgrade to Reactor Dysprosium-SR12 #25730

❤️ Contributors

We'd like to thank all the contributors who worked on this release!

v5.1.18.RELEASE

15 Sep 10:40
Compare
Choose a tag to compare

⭐ New Features

  • PropertiesLoaderSupport should ignore socket/connect exceptions as well #25720
  • Avoid full singleton lock for DefaultSingletonBeanRegistry.getSingleton(beanName, false) #25695
  • Possible optimization in UrlResource #25550
  • Refine use of substring operations #25513

🪲 Bug Fixes

  • FileUrlResource isWritable method returns true if URL protocol is not indicating a file #25739
  • VerifyErrors when using SpEL compilation with Thymeleaf when invoking a default method defined in an interface #25711
  • CallMetaDataContext.reconcileParameters overwrites cursor name #25708
  • SQLErrorCodesFactory.getErrorCodes(DataSource) returns empty error codes if access to transactional connection fails #25692
  • Make "org.springframework.util.unit.DataSize" class Serializable #25676
  • Joda-Time presence check fails to detect Joda-Time 2.x specifically #25658
  • Potential integer overflow in AbstractResourceBasedMessageSource.setCacheSeconds(int) #25642
  • Lazy dependency proxy does not populate bean dependencies #25563
  • StaticListableBeanFactory.isSingleton() returns false for singleton beans #25523
  • MockHttpServletResponse reset() does not reset charset field #25510

📔 Documentation

  • Document how to specify Jackson JSON view serialization hints with @RestController and Webflux #25704
  • Prevent confusion about build(boolean) method in UriComponentsBuilder #25701

🔨 Dependency Upgrades

  • Upgrade to Reactor Californium-SR21 #25731

v5.0.19.RELEASE

15 Sep 11:25
Compare
Choose a tag to compare

⭐ New Features

  • PropertiesLoaderSupport should ignore socket/connect exceptions as well #25721
  • Possible optimization in UrlResource #25551
  • Refine use of substring operations #25514

🪲 Bug Fixes

  • FileUrlResource isWritable method returns true if URL protocol is not indicating a file #25740
  • VerifyErrors when using SpEL compilation with Thymeleaf when invoking a default method defined in an interface #25712
  • CallMetaDataContext.reconcileParameters overwrites cursor name #25709
  • SQLErrorCodesFactory.getErrorCodes(DataSource) returns empty error codes if access to transactional connection fails #25693
  • Joda-Time presence check fails to detect Joda-Time 2.x specifically #25659
  • Potential integer overflow in AbstractResourceBasedMessageSource.setCacheSeconds(int) #25643
  • Lazy dependency proxy does not populate bean dependencies #25564
  • StaticListableBeanFactory.isSingleton() returns false for singleton beans #25524
  • MockHttpServletResponse reset() does not reset charset field #25511

📔 Documentation

  • Document how to specify Jackson JSON view serialization hints with @RestController and Webflux #25705
  • Prevent confusion about build(boolean) method in UriComponentsBuilder #25702

v4.3.29.RELEASE

15 Sep 11:42
Compare
Choose a tag to compare

⭐ New Features

  • PropertiesLoaderSupport should ignore socket/connect exceptions as well #25722
  • Refine use of substring operations #25515

🪲 Bug Fixes

  • VerifyErrors when using SpEL compilation with Thymeleaf when invoking a default method defined in an interface #25713
  • SQLErrorCodesFactory.getErrorCodes(DataSource) returns empty error codes if access to transactional connection fails #25694
  • Potential integer overflow in AbstractResourceBasedMessageSource.setCacheSeconds(int) #25644
  • Lazy dependency proxy does not populate bean dependencies #25565
  • Synchronized blocks in MethodOverrides are hurting concurrency #25549
  • StaticListableBeanFactory.isSingleton() returns false for singleton beans #25525
  • MockHttpServletResponse reset() does not reset charset field #25512

📔 Documentation

  • Prevent confusion about build(boolean) method in UriComponentsBuilder #25703

v5.3.0-M2

11 Aug 09:00
Compare
Choose a tag to compare
v5.3.0-M2 Pre-release
Pre-release

⭐ New Features

  • Introduce getBeanProvider variants with allowEagerInit flag #25559
  • Allow to access the underlying ConnectionFactory from DatabaseClient #25521
  • Optimize DefaultLifecycleProcessor::startBeans #25506
  • Refactoring opportunity in HandlerExecutionChain #25500
  • Support macros in crontab expressions #25471
  • Introduce CronExpression #25464
  • Use System.currentTimeMillis() in AbstractSockJsService #25447
  • Simplified return statement #25415
  • Improve UriComponents.sanitizeSource() #25401
  • Use Math.min() in ExponentialBackOff #25381
  • Allow auto grow for entries without default constructor in SpEL #25367
  • Remove redundant Character.toLowerCase() in BeanPropertyRowMapper #25361
  • Leverage spring.ignore.xml flag to avoid XmlBeanDefinitionReader #25338
  • Leverage spring.ignore.xml flag to avoid SQLErrorCodeSQLExceptionTranslator #25335
  • Check for valid IPv6 host in UriComponentsBuilder.fromUriString #25334
  • Support use of RSocketClient #25332
  • Enhance HandlerMappingIntrospector to cache parsed patterns #25312
  • DefaultSubscriptionRegistry: Reduced thread contention #25298
  • Support multiple Content-Language header values in MockHttpServletResponse #25281
  • added possibility to extend ModelAttributeMethodArgumentResolver #25265
  • WebSocketMessage's methods fromMessage and toFrames ignore Netty WebSocketFrame metadata #25099
  • Support for pattern based origin cors configuration #25016
  • Collect metrics during application context startup #24878
  • Sort detected PersistenceExceptionTranslator beans #24644
  • Constructor based bean binding should support url path variables, not only request parameters #24107
  • Feature request: provide support for JSR 310 types in CronTrigger #23496
  • RouterFunction does not respect path matching set in WebFluxConfigurer #23236
  • Turn MethodArgumentNotValidException into subclass of BindException #23107
  • Support for direct path lookups in WebFlux #22961
  • ExceptionHandlerExceptionResolver should support exceptions from any handler #22619
  • @Scheduled(cron = "0 0 0 ? * 5#3") is not supported #22436
  • Consider updating the default Hibernate dialect for MySQL databases #22326
  • Spring MVC - Kotlin: Cannot bind MultipartFile in constructor [SPR-17640] #22169
  • Support JSON streaming formats besides application/stream+json #21283
  • Support raising exception with a custom HTTP status code #20336
  • Support for the last day in month cron expression [SPR-15547] #20106
  • Cron Expression validation [SPR-14933] #19500
  • Cron expression with fixed weekday and fixed date may or may not lead to IllegalStateException (runaway search for next trigger) [SPR-8981] #13621

🪲 Bug Fixes

  • MockHttpServletResponse's setCharacterEncoding() does not update contentType property #25536
  • Bean overriding for 'taskExecutor' alias is not detected #25430
  • Creating ServerRequest from MockHttpServletRequest changed behaviour 5.3.0-M1 #25353
  • CaffeineCache does not support LoadingCache consistently #25173
  • CronSequenceGenerator - Friday 13th issue [SPR-17036] #21574

📔 Documentation

  • Use Groovy syntax highlighting in reference manual #25554
  • Fix comment syntax in xml examples #25537
  • Fix links in Javadoc #25448
  • Fix typo in javadoc #25396
  • Add logging reference documentation [SPR-17626] #22158

🔨 Dependency Upgrades

  • Upgrade to Jackson 2.11.2 #25398
  • Upgrade to Reactor 2020.0.0-M2 #25373
  • Upgrade to RSocket 1.1 M1 #25331
  • Upgrade to ASM 9.0 #24872
  • Upgrade to Kotlin 1.4 RC #24171

❤️ Contributors

We'd like to thank all the contributors who worked on this release!

v5.2.8.RELEASE

21 Jul 09:06
Compare
Choose a tag to compare

⭐ New Features

  • Defer creating logger in StandardWebSocketHandlerAdapter #25427
  • MutablePropertySources will not find or remove proxied sources #25369
  • Profiles should be comparable when created via Profiles.of() #25340
  • Avoid re-creating RSocketRequester instance per subscriber #25330
  • Hoist Class.getName() from String concatenation to dodge an issue related to profile pollution #25324
  • Improve Random seed in SocketUtils #25321
  • Support fragments in UriComponentsBuilder.fromHttpUrl() #25300
  • Support for custom cache registration in CaffeineCacheManager #25230
  • Don't get ContentCachingResponseWrapper in ShallowEtagHeaderFilter so that users can extend this wrapper #24976
  • Unnecessarily alarming stack trace logged during scheduler resolution #23268
  • Expose a setExceptionListener method in DefaultJmsListenerContainerFactory [SPR-17570] #22102

🪲 Bug fixes

  • UriComponentsBuilder.cloneBuilder() cause sharing query parameters between builders #25423
  • SimpleJdbcCall does not find stored function with PostgreSQL driver 42.2.11 #25399
  • MappingJackson2HttpMessageConverter might be too specific in its Charset support #25322
  • ReactorNetty websocket issue for multiple clients with different protocols #25315
  • Mutating a ServerHttpRequest breaks the existing context path #25279
  • ServerHttpRequest.getSslInfo() always returns null for reactor-netty HTTP/2 requests #25278
  • NoRollbackFor rule causes TransactionAspectSupport to log unwarranted "exception overridden" error on WebSphere #25253
  • AbstractJackson2HttpMessageConverter - Check for encoding breaks JSON to POJO de-serialization experience #25247
  • The AbstractTemplateViewResolver class is not abstract #25240
  • WebClient: NPE and leak in case connection is reset by server. #25216
  • Oracle LOB segments holding TEMP space after executing SP using SimpleJdbcCall with SqlParameterSource #22972
  • IllegalReferenceCountException happens when the operation was canceled #22594
  • DefaultListableBeanFactory.getBean(Class) may throw NoSuchBeanDefinitionException when removeBeanDefinition is being called simultaneously to remove an unrelated bean #22263

📔 Documentation

  • Clarify enforceInitMethod/enforceDestroyMethod default values in AbstractBeanDefinition #25402
  • Improve JavaDoc for ConfigurableApplicationContext.refresh() #25380
  • Fix interface and class names in examples in core-aop doc #25351
  • Wording changes #25314
  • Fix typo in Java example for handler class #25302
  • Improve Javadoc for @value regarding supported expressions #25284
  • Fix syntax in validation examples #25251
  • Document exception handling limitations in TaskDecorator implementations (specifically for ThreadPoolTaskExecutor#submit) #25231

🔨 Dependency upgrades

  • Upgrade to Reactor Dysprosium-SR10 #25376
  • Upgrade to nohttp 0.0.5 #25266

❤️ Contributors

We’d like to thank all the contributors who worked on our current release!