Hi, Spring fans! What a crazy month since we last spoke! Happy belated holidays and new year to you all! I hope it was festive, fun and filled with things learned and family and friends hugged. I've been doing my best to keep busy, as usual. Just completed jury duty here in California, USA, yesterday. I've been working on my Reactive Spring book, writing a ton of code to support improvements to the production pipeline of my podcast, and so much more. I mourned the passing of my father on December 11th, celebrated the holidays with my family and friends. I visited Los Angeles, California; Denver, Colorado; Sydney and Brisbane, Australia; Tokyo, Japan; and more.
Oh, also, you might have heard: the Spring team, and Pivotal as a whole, are now part of VMware! So I spent the last few weeks ramping up as a new employee of VMWare. Now, some of you may know that Pivotal was spun out of EMC and VMware in 2013. We've just been spun back in, 7 years later. I was the first Spring Developer Advocate, ever, when I first joined VMWare in 2010, 10 years ago, and then I continued in that function at Pivotal, and I continue again here at VMWare. So, that's been fun!
I always wind down the last year with a look at the overall guiding trends from that year. This year, the last year of the decade was different. I looked instead at the big trends defining the decade for the Spring and JVM developer. It wasn't easy! Where does one even start? It's hard to believe we've come this far, as a community. Remember, the earliest pages of code in Spring date back to 2001, almost 19 years ago. Rod Johnson, the original creator of Spring, talked about Spring's progression over the last almost two decades in this blog post – 18 Years of Spring.
Let's analyse the decade that was.
This Decade in Spring
It wasn't easy widdling down an entire decade, but I did my level-headed best to do it.
- Spring Boot – this one is pretty easy! Spring Boot is changing the world. When we on the Spring team announced the .4 release of Spring Boot back in 2013, none of us could have guessed how far it would go. It was an opinionated approach on Spring and the Java ecosystem it supports that embraces some of the best patterns from convention-over-configuration frameworks like Rails, Grails, Spring Roo and others while also not sacrificing flexibility. Spring Boot is now – by far – the most widely used JVM library in the JVM ecosystem save for Java itself. All the major-scale online services use it. It's been forged in the fires of production and the work, of late, has seen it go from being the most productive, powerful framework to being among the most performant frameworks. Who knows what the next decade will offer for the Spring developer, but I'll bet it builds upon Spring Boot.
- Spring Cloud – if Spring Boot is an opinionated approach to building applications, Spring Cloud – which builds on Spring Boot – is an opinionated approach at building applications (microservices!) that are destined for the cloud. The cloud, for modern applications, is production. Spring Cloud leverages the same Spring Boot autoconfiguration and supports an opinionated approach to building applications.
- Java 8 – Java 8 came out in 2014 and revitalized the JVM. If it wasn't clear with Spring Boot that Java was the ecosystem to bet on, this release cinched it. It showed that there was life yet in this workhorse ecosystem and introduced tons of new language and runtime features. Suddenly, Java syntax looked a lot more like some of its more contemporary siblings. It's hard to underestimate how important Java 8 and deliver-new-features mindset the Java team has since embraced is to our ecosystem.
- The Death of the Application Server – While Spring Boot wasn't the first to support alternative deployment models for JVM-based applications, it was the first to popularize it. It made clear that the application server, such as we knew them, were no longer relevant. Sure, you can run a Spring Boot application in an application server, but…. why? You gained nothing and sacrificed, clearly sacrificed, a considerable amount to do so. Now, keep in mind, Pivotal/VMware are, and have been, one of the major investors into Apache Tomcat, the most prolific application server, so the death of the application server was a self-inflicted wound. We're just fine with that. You can use Apache Tomcat, as a library, in Spring Boot, and millions already do. It's just that you don't have to. The HTTP server isn't the same as your runtime, and that's as it should be.
- Cloud Native Applications – Spring Boot assumed the runtime responsibilities of the application server, where the cloud stepped in to deliver the platform-centric responsibilities that the application server never could. These two things – smart applications powered by Spring Boot and smart platforms like Cloud Foundry and Kubernetes – have ushered in a new era of Cloud Native Java applications, a topic I love so much I wrote a book on it!
I could've included so many other things that were implied in some of these higher-level trends – like containers – but I didn't. I wanted to keep it brief. What do you think? Do these posts line up with your sense of the industry in the last decade?
This Month in Spring
And of course, we've still got a ton of exciting stuff to review from the last month, so let's get to it!
- Spring team legend Roy Clarkson published a really interesting blog post on the Reactive BookStore Service Broker. A service broker is an application that acts as an agent, manipulating some sort of resource, in a unified way, on behalf of a Kubernetes or a Cloud Foundry platform. It's an API with a uniform interface. You could use a service broker to spin up MongoDB instances, RabbitMQ, SendGrid, e-mail caches, and so much more. So this post demonstrates how to build a custom service broker using reactive APIs.
- Hey Spring fans! Do not miss this February 12th: Effective Spring on Kubernetes Webinar
- Spring Integration AWS 2.3.1 & Spring Cloud Stream Kinesis Binder 2.0.1 Available
- In this installment of A Bootiful Podcast, I talked to Pivotal Labs Sydney director David Julia about applied agile, testing strategy, the business of Pivotal Labs, and so much more. Do not miss this one. This was one of my favorite episodes – so illuminating.
- Spring Security 5.3.0.M1 Released
- There's another excellent webinar, in two short days, on Getting Started with Spring Cloud Gateway
- JAXEnter did a Java retrospective series, and I was one of the industry veterans that they consulted for their opinion. I got my responses in a little late, but they added them in (retroactively) and you might enjoy the read.
- I love This Month in RabbitMQ and they just published the December 2019 recap installment.
- Speaking of RabbitMQ, there are a ton of exciting new changes in store. Bit by bit, the team is replacing the old consensus protocols with Raft, introducing new queue types, providing better upgrade features and observability and introducing Kubernetes support.
- I liked Tom Prior's post, Easy Lift Off with Kotlin and PCF.
- Hippolyte Durix created a really interesting Spring Boot application demonstrating test-driven design, and domain-driven design, and Hexagonal architecture, among other things.
- I am really looking forward to speaking at Dr. Venkat Subramaniam's new conference in beautiful Colorado, DevDotNext
- The Okta Developer blog has a great post on securing legacy apps with Spring Cloud Gateway
- Happy new year! In this first installment of A Bootiful Podcast in the new year, I am delighted to have been able to bring you an interview with my hero, the amazing, the inimitable, the legendary, Spring Boot, and Spring Cloud co-founder Dr. Dave Syer
- We'd love your feedback on your opinion of Spring Cloud Data Flow
- Did you see the Spring Cloud roadmap published right before Christmas?
- I like this blog, Modernize Monolith Java Application to Containerized Microservices, that looks at building microservices with Spring Boot
- I love Matt Raible's tutorial over on the Okta blog, Build a CRUD App with Angular 9 and Spring Boot 2.2
- Oliver Drotbohm identifies the common issues in unstructured monoliths and discusses approaches to package design, component structure, transactions, and the usage of events, in this SpringOne Platform 2019 talk that's now on InfoQ.
- I loved this talk from Google's Ray Tsang on tools – Jib, Skaffold – and best practices for Spring and Kubernetes.
- This is an interesting thread on Reddit: are Reactive Streams single threaded or multi-threaded
- This is an interesting example on doing RSocket BASIC authentication with Spring
- This seems like an interesting usecase: Spring Boot and Elasticsearch-powered autocompletion.
- Pivotal is now officially part of VMware!
- Microsoft's Jialin Dai on the various Spring for Azure Starters
- Getting Started with Spring Cloud DataFlow and Confluent Cloud
- Baeldung has a nice post on one of the other most important things to come out of the last decade for the average Spring developer: color ASCII art banners!
- This Practical Guide looks at using Spring Boot and Spring Cloud for microservices.
- Applying CI/CD to Java Apps Using Spring Boot – DZone Java
- Check out the talk that Google's James Ward, Okta's Matt Raible and I gave at SpringOne Platform 2019: From Idea to Dev to Ops
- This is a nice post on using Reislience4J and Spring Cloud CircuitBreaker
- I love this post introducing the
Flow
concept in Kotlin - Did you see the amazing Christmas-themed Spring Initializr? š
- There are a ton of new features in Java 14 and you should check them out
- Spring for Apache Kafka 2.4 is Available
- Spring Cloud Roadmap and Hoxton and Greenwich Maintenance and EOL Announcements
- Spring Cloud Hoxton Service Release 1 (SR1) is available.
- I really enjoyed talking to Reactor teammate Simon Baslé in this installment of A Bootiful Podcast.
- Spring Tools 4.5.0 released
- Spring for Apache Kafka 2.4 Release Candidate
- The Baeldung site has a nice look at Spring's
@RequestParam
annotation - The Java guides have a nice example of Spring dependency injection, complete with an example
- Greg Whitaker has a nice example of using per-request RSocket Metadata in Spring Boot
- I like Greg Turnquist's video on testing with Spring Boot
- The new Spring Tools 4.5.0 ships on top of the latest Eclipse 2019-12 edition – get the bits while they're hot!
- Spring Cloud Circuit Breaker for Resilience4j now available !
- Good news everybody! The support channel for Azure Spring Cloud is now available!
- An interesting post on the Spring Boot starter parent
- Flight of the Flux 3 – Hopping Threads and Schedulers
- Spring Boot for Apache Geode & Pivotal GemFire 1.1.4.RELEASE & 1.2.2.RELEASE Available
- Spring Session for Apache Geode & Pivotal GemFire 2.1.7.RELEASE and 2.2.1.RELEASE Available
- Spring Boot 2.1.x EOL November 1st 2020
- Learn how LAIKA, a premier stop-motion animation studio in Portland, OR, uses RabbitMQ
- Please take this survey to help us know what you'd like to change for Spring Cloud Data Flow
- Fellow Java Champion and Jetbrains' Trisha Gee concludes her epic series looking at Reactive Spring just in time for Christmas with this latest installment introducing RSocket
- Not strictly speaking related to Spring, but generally good advice for anyone interested in software architectures: Simon Brown's introduction to Layers, hexagons, features and components is a worthy read.
- DZone has a nice post on implementing Spring Boot with Spring Data JPA
- Thanks everyone – the @SpringData handle has crossed 30,000 followers!
- Our friends at Alibaba have open-sourced their Alibaba RSocket Broker supporting meshes, streaming & IoT, among other things
- Greg Turnquist published a nice video, Five Reasons to Use Spring Boot
- Register now to make this webinar (tomorrow, Wednesday the 19th, 2019), on Spring Cloud Kubernetes
- I loved this second introduction to Spring Data Neo4j's new Reactive implementation
- This SpringOne Platform 2019 talk, RabbitMQ & Kafka is now online and worth a watch.
- Spring Cloud Data Flow 2.3.0 GA Released
- Stream Processing with Spring Cloud Stream and Apache Kafka Streams. Part 6 – State Stores and Interactive Queries
- Stream Processing with Spring Cloud Stream and Apache Kafka Streams. Part 5 – Application Customizations
- Spring Data R2DBC goes GA
- Spring Boot 2.2.2 is now available
- Spring Boot 2.1.11 is now available
- In this installment of A Bootiful Podcast, I talked to Pivotal's Katrina Bakas about the Pivotal HealthWatch product, Kubernetes, Cloud Foundry and so much more.
- Stream Processing with Spring Cloud Stream and Apache Kafka Streams. Part 4 – Error Handling
- Stream Processing with Spring Cloud Stream and Apache Kafka Streams. Part 3 – Data deserialization and serialization
- Spring Data Moore SR3 and Lovelace SR14 released
- Stream Processing with Spring Cloud Stream and Apache Kafka Streams. Part 2 – Programming Model Continued
- Spring Framework maintenance roadmap in 2020 (including 4.3 EOL)
- Spring Framework 5.2.2 and 5.1.12 available now
- Reactor team member Sergei Egorov's new Daily Reactive series looks awesome! Well worth a read, too!
- Have you checked out this month's This Month in RabbitMQ roundup yet? conference-recording-recommendations-2019/)
- I love Trisha Gee’s tutorial series introducing reactive Spring Boot.