2. Safe Harbor Statement
The following is intended to outline the general direction of VMware's offerings. It is intended for information
purposes only and may not be incorporated into any contract. Any information regarding pre-release of
VMware offerings, future updates or other planned modifications is subject to ongoing evaluation by
VMware and is subject to change. This information is provided without warranty or any kind, express or
implied, and is not a commitment to deliver any material, code, or functionality, and should not be relied
upon in making purchasing decisions regarding VMware's offerings. These purchasing decisions should only
be based on features currently available. The development, release, and timing of any features or
functionality described for VMware's offerings in this presentation remain at the sole discretion of Pivotal.
Pivotal has no obligation to update forward looking information in this presentation.
2
4. Spring Framework 5.0
Released in September 2017
Foundation for Spring Boot 2.0
● Java 8 / 9 and nullability revision
● Programmatic bean registration
● Core Reactor & RxJava support
● WebFlux & WebFlux.fn
● JUnit 5
4
5. Spring Framework 5.1
Released in September 2018
Foundation for Spring Boot 2.1
● Support for Java 11 LTS
● Programmatic bean retrieval
● Logging revision
● WebFlux DSL enhancements
● Support for Hibernate ORM 5.3
5
6. Spring Framework 5.2
Released in September 2019
Foundation for Spring Boot 2.2 and 2.3
● Annotation retrieval revision
● Reactive transaction management
● RSocket messaging
● Kotlin coroutines
● WebMvc.fn
6
7. To be released in October 2020
Foundation for Spring Boot 2.4 and 2.5
● Adaptations for native application deployment
● Binding support for Java 14 / 15 records
● JDBC & R2DBC support revision
● Spring MVC: path patterns, test client
● Hibernate ORM 5.2+ baseline
7
Spring Framework 5.3
8. Long-Term Support
Preparing for an extended 5.3.x maintenance phase
● a.k.a. Long-Term Support (LTS)
Supporting a range of JDK generations
● initially JDK 8 - 15
● expecting JDK 8 - 17 eventually (in the 5.3.x line)
● focus on JDK 8, 11, 17 LTS
● including support for preview features
8
9. Core Container Revision
Deactivating code paths for native image support
● spring.xml.ignore
● spring.spel.ignore
Support for Java record class conventions
● compatible with Java 14 / 15 records
● also supporting similarly styled classes
9
10. public record Person(String firstName, String lastName) {
}
public class Person {
private final String firstName, lastName;
public Person(String firstName, String lastName) {...}
public String firstName() { return this.firstName; }
public String lastName() { return this.lastName; }
...
}
Records and Record-Style Classes
10
11. JDBC Support Revision
JdbcTransactionManager
● with data access exception translation on commit
DataClassRowMapper
● constructor-based result binding support
● Kotlin / Lombok data classes as well as Java records
Support for queryForStream on JdbcTemplate
● lazy iteration over closeable java.util.stream.Stream
11
12. JdbcTemplate Result Stream
Stream<Person> result = template.queryForStream(
"SELECT first_name, last_name FROM person",
new DataClassRowMapper<>(Person.class));
Stream<Person> result = template.queryForStream(
"SELECT first_name, last_name FROM person",
(rs, rowNum) -> new Person(
rs.getString("first_name"),
rs.getString("last_name")));
12
13. Introducing Spring R2DBC
Core R2DBC support factored out of Spring Data R2DBC
● ConnectionFactory setup etc
R2dbcTransactionManager
● reference implementation for ReactiveTransactionManager SPI
DatabaseClient
● reactive variant of JdbcTemplate
● analogous to WebClient in WebFlux
13
14. Reactive DatabaseClient
DatabaseClient client =
DatabaseClient.create(connectionFactory);
Flux<Person> result = client
.sql("SELECT first_name, last_name FROM person")
.map(row -> new Person(
row.get("first_name", String.class),
row.get("last_name", String.class)))
.all();
14
15. Spring Web MVC
Efficient URL matching with parsed PathPattern
● aligned with WebFlux
● as alternative to Spring’s AntPathMatcher
MockMvcTestClient
● exposing a WebTestClient bound to MockMvc
● single test client API for test with MockMvc or live server
15
16. Spring WebFlux
DefaultPartHttpMessageReader
● fully reactive message reader for multipart requests
● as alternative to Synchronoss NIO Multipart library
HttpComponentsClientHttpConnector
● WebClient backed by Apache HttpComponents 5
● as alternative to Jetty and Reactor-Netty
16
17. Internal Performance Tuning
Optimized data structures
● HashMap pre-sizing
● ArrayList / ArrayDeque
Optimized concurrency
● concurrent access to internal caches
● container locking for bean retrieval
17
18. Active Development on 5.3.x
Spring Framework 5.3.x will be developed/maintained until 2024
● with full support for all classic Spring features
● several deprecations but hardly any removals
● natural upgrade path for long-lived Spring applications
Expected to cover JDK 16 as well as 17 still
● JDK 17 LTS to be released in September 2021
● forward compatibility with Project Loom (virtual threads)
Foundation for Spring Boot 2.4 and 2.5, possibly even a 2.6...
18
19. Beyond 5.3.x ... Towards 6.0 ?
Major removals or rearrangements
● outdated configuration formats (XML?)
● outdated EE APIs (EJB, JCA, JAX-WS)
● outdated RPC support (HTTP Invoker)
Migration to Jakarta EE 9+
● jakarta.servlet (Tomcat 10, Jetty 11)
● jakarta.persistence (Hibernate ORM 6?)
Streamlined support for GraalVM and Project Leyden
19
20. Enjoy the upgrade!
Session: “The Path Towards Spring Boot Native Applications”
Session: “Full Steam Ahead, R2DBC!”
#springone@s1p
Stay Connected.