⭐ New Features
- Spring Websockets Broker relay supporting a cluster of STOMP endpoint addresses [SPR-12452] #17057
- Quartz Scheduler - configurable SchedulerFactory [SPR-16439] #20985
- Avoid String concatenation for not-null assertion in BeanProperty/DirectFieldBindingResult [SPR-16455] #21000
- AcceptHeaderLocaleResolver should match country locales against supported language locales [SPR-16457] #21002
- Support for ResolvableType.getType().getTypeName() on Java 8 [SPR-16535] #21078
- Consistent incrementer arrangement for PostgreSQL, DB2 and SAP HANA [SPR-16558] #21101
- MockMvcResultMatchers.jsonPath(String).value() should have a matching method to declare the expected type [SPR-16587] #21129
- Support for SimpleEvaluationContext in SpEL [SPR-16588] #21130
- Consistent volatile access to running flag in Lifecycle implementations [SPR-16596] #21137
- When
@DependsOn
throws a NoSuchBeanDefinitionException it should include the dependent bean for clarity [SPR-16628] #21169 - Generate multipart boundary using SecureRandom [SPR-16635] #21176
- Reduce ClassUtils.forName overhead (in particular for annotation introspection purposes) [SPR-16667] #21208
- Add cpp to mime.types as text/plain [SPR-16678] #21219
🪲 Bug Fixes
- Precondition failed for PUT methods on ResponseEntity return types [SPR-15780] #20335
- SubProtocolWebSocketHandler should not log ERROR on "No messages received after ..." [SPR-16409] #20955
- ServletServerHttpRequest.getURI() may throw a java.net.URISyntaxException [SPR-16414] #20960
- AbstractClientSockJsSession.close call does not propagate IOException from disconnect [SPR-16415] #20961
- Spurious WARNINGs when XML declared TransactionProxyFactoryBean's target bean depends on an annotation declared bean that depends on another bean [SPR-16427] #20973
- Lambda error detection might not work on JDK 9 [SPR-16435] #20981
- CachingConnectionFactory - Invalid session in session cache [SPR-16450] #20995
- MockMvcRequestBuilder does not decode pathInfo [SPR-16453] #20998
- MimeType compareTo implementation is not compatible with equals [SPR-16458] #21003
- GSON converter only serialises fields of controller method return type, ignoring subclass fields of response object [SPR-16461] #21006
- SimpleJdbcCall can't access synonyms in Oracle database [SPR-16478] #21022
- Set thread interrupt flag on InterruptedException [SPR-16479] #21023
- JsonMappingException when trying to instantiate org.springframework.messaging.Message [SPR-16486] #21029
- Deadlock in SubProtocolWebSocketHandler on shutdown with Undertow [SPR-16488] #21031
- NPE in Spring-JDBC with Oracle and SimpleJdbcInsert [SPR-16495] #21038
- ExceptionHandlerExceptionResolver advice applicability check may fail against interface-based controller proxy [SPR-16496] #21039
- FormTag renders empty tag [SPR-16498] #21041
- ForwardedHeaderFilter garbles query params during sendRedirect() [SPR-16506] #21049
- StringIndexOutOfBoundsException when rewriting links in CSS resources [SPR-16526] #21069
- Spurious ERROR-level logging when using SSEEmitter [SPR-16528] #21071
- GsonHttpMessageConverter cannot be used in an SseEmitter because it closes the response stream [SPR-16529] #21072
- testBindInstantFromJavaUtilDate fails on systems in the Pacific/Auckland time zone [SPR-16534] #21077
- WebApplicationContextFacesELResolver#isReadOnly always return false [SPR-16543] #21086
- PostgresTableMetaDataProvider.isGetGeneratedKeysSimulated() does not detect Postgres 10 [SPR-16556] #21099
- Missing PersistenceException cause message in refresh failure warn log [SPR-16559] #21102
- Reading annotations in ConfigurationClassParser does not fall back to ASM on Google App Engine [SPR-16564] #21106
- Inconsistent synchronization in AbstractBeanFactoryBasedTargetSource and JdbcAccessor [SPR-16570] #21112
- WebAsyncManager concurrentResult should be volatile [SPR-16571] #21113
- TransactionTemplate inherits equals()/hashCode() from DefaultTransactionDefinition [SPR-16572] #21114
- SimpleAliasRegistry registerAlias not atomic [SPR-16577] #21119
- URIEditor should not double escape classpath: URIs [SPR-16581] #21123
- RestTemplate with HttpComponentsClientHttpRequestFactory and no buffering with an interceptor throws UnsupportedOperationException [SPR-16582] #21124
- Inconsistent handling of null values through Java 8 accessors in ConcurrentReferenceHashMap [SPR-16584] #21126
- AcceptHeaderLocaleResolver chooses wrong Locale for language match [SPR-16599] #21140
- CallMetaDataContext.reconcileParameters doesn't catch output parameters with DatabaseMetaData.procedureColumnResult type (on Postgres) [SPR-16611] #21152
- Consistent thread-safe iteration in DefaultSingletonBeanRegistry [SPR-16620] #21161
- FactoryBeanRegistrySupport atomicity issues [SPR-16625] #21166
- Address race condition within spring that causes about-to-be-created-bean exceptions [SPR-16627] #21168
- An error occurs if a blank character exists before and after the delimiter of the MIME type parameter. [SPR-16630] #21171
- Multipart Upload with Commons Fileupload on lazy mode downloads data on cleanup [SPR-16640] #21181
- Concurrent result may be missed due to a race condition in MockMvc [SPR-16648] #21189
- ServletUriComponentsBuilder should replace context path when X-Forwarded-Prefix is present [SPR-16650] #21191
- Annotation lookup on parameter in inner class constructor fails when using javac from JDK versions prior to 9 [SPR-16652] #21193
- UriComponentsBuilder Forwarded header parsing can throw java.lang.NumberFormatException [SPR-16660] #21201
- NamedParameterUtils.parseSqlStatement should parse :{x} style parameter correctly [SPR-16663] #21204
- Unable to bind a null value for UUID column with PostgreSQL [SPR-16669] #21210
- SimpleMailMessage's handling of to/cc/bcc arrays is inconsistent [SPR-16671] #21212
- DefaultResponseErrorHandler wastes the body of a response with an unknown status [SPR-16604] #21145
- Race condition in ConcurrentMapCache [SPR-16533] #21076