Hi, Spring fans! Welcome to another installment of This Month in Spring! I hope your holidays were excellent! It's a new year and a chance for new and novel. As I write this, we're also smack dab in the middle of the Lunar New Year, the year of the rabbit. So, to those billions of people worldwide who celebrate: Happy Lunar New Year!
As I write this, I'm in New York City, New York. I came to host a SpringOne Essentials watch party for folks who registered for that here in New York City. I joined a good crowd here at the VMware New York City office, presented some of my favorite features in the Spring ecosystem, and then joined thousands and thousands worldwide to watch the SpringOne Essentials Livestream.
If you weren't there… you missed out! It was awesome, but have no fear: I took notes! There was a lot of really cool stuff, and I couldn't hope to cover it all; after all, even the abbreviated Essentials took nine hours to introduce! I wouldn't even know where to start, but here are some of my favorite moments.
- VMware CEO Raghu Raghuram introduced the scope of SpringOne Essentials and connected the fantastic opportunities awaiting application developers using Spring to the large VMWare mission.
- Then VMWare SVP James Watters took the stage to talk about the idea of building "cloud smart" software and systems, which are systems and software designed and able to run on multiple clouds, a requirement in the modern era of utility cloud computing infrastructure.
- Spring co-founder and legend Jürgen Hoeller took the stage both in the opening day mainstage talks and in a subsequent detailed session to talk about the exciting new opportunities implied by Spring Framework 6.0 and Spring Boot 3.0. He looked at the support lifetimes for Spring, release dates, support lifetimes, and how they coincide with Java release dates. Then he got right into the new baselines for Spring Framework 6.0, which requires Java 17+ and Jakarta EE 9+. He also spoke to some exciting implications for the latest release, looking forward and contextualizing what is here today with how it'll apply to what will come tomorrow. Finally, he spoke about the new AOT engine in Spring Framework 6.0, which makes it trivial to generate GraalVM native image-ready applications that startup instantly and take vanishingly small amounts of RAM. While the AOT engine is here today, in Spring Framework 6.0, it'll play nicely with Project Leyden, an effort to offer a spectrum of opt-in optimizations for a JVM application, conceivably including AOT-like native images. Coordinated Restore at Checkpoint (CRaC) is an OpenJDK feature that provides a fast start and immediate performance for Java applications. It's not yet GA, but some exciting opportunities exist for Spring developers.
- Your services and systems are only as safe as their security stack, so it's no wonder that organizations far and wide choose Spring Security to help protect their systems and services, connecting to all sorts of identity providers (IDPs) to authentication and authorization a breeze. You can also use Spring Security as your IDP with the new Spring Authorization Server, which Joe Grandja, Steve Riesenberg, and Laurentiu Spilca introduced in a fantastic day three session.
- Decades of building distributed systems have shown time and time again that messaging-oriented middleware (MOM), message queues, and message buses (or whatever you want to call them) are the backbone for reliable and resilient systems and services. And there is no more straightforward abstraction than Spring Cloud Stream, which Glenn Renfro and Oleg Zhurakousky introduced on Day three.
- Thomas Wuerthinger (the GraalVM project founder) and Sebastien Deleuze took the stage to dive deep into what GraalVM is, precisely what the
native-image
compiler offers Spring developers with the new AOT engine in Spring Framework 6.0. This segment was one of my favorites; Sebastien kickstarted the AOT work in Spring many years ago, and Thomas cofounded GraalVM. You don't often hear from two people more steeped in a particular technology and discipline than these two! - Are you running Kubernetes and want to get out from under a mountain of YAML and distractions? Then you should use the Tanzu Application Platform (TAP), which lets organizations right-size their deployment pipelines and build their golden path to production. It was really exciting seeing Ryan Baxter, Cora Iberkleid, Greg Meyer, Nivedita Ghosh, Ben Hale, Adib Saikali, and Scott Sisil all chime in at various points to expand on the possibilities.
- Microsoft's Sandra Ahlgrimm joined Sebastien to bring us up to date on the latest and greatest in Azure Spring Apps, the cloud platform jointly developed platform by the Spring team and Microsoft. Then, VMware VP Ryan Morgan and Microsoft CVP Amanda Silver took the stage to look at Azure Spring Apps Enterprise, which bundles even more amazing features for Spring developers wanting to develop and deploy cloud-native services on Azure Spring Apps. There was a great session by VMware's Adib Saikali and Microsoft's Asir Selvasingh that also went into detail about Azure Spring Apps on the second day.
- While Spring has already delivered so much, a huge part of this keynote was the possibilities that lay beyond the horizon. Spring keeps growing, and so should you. We've tried on the Spring team to support this continuing education process (have you seen my Spring Tips Youtube series?), but today we're announcing the best way forward yet: the Spring Academy. The Spring Academy is a free platform offering on-demand education curated by the world's foremost experts in Spring. This platform is everything you need for Spring Certification. Are you ready to take your Spring skills to the next level? Get access to the official Spring Certified Professional exam and the prerequisite courses you’ll need to get prepped—all included in your (cheap, but not free) Spring Academy Pro membership.
Stay tuned for the live streams themelves! In the meantime, we've got a ton of fun things to get into this month, so let's get goin'!
- Spring Boot 2.7.8 available now
- Spring Boot 3.0.2 available now
- Spring Modulith 0.3 released
- A Bootiful Podcast: Dr. Amanda Martin, Gradle developer advocate
- Adventures in Maven Dependency Conflict Resolution
- Create better Spring libraries with @Enable… Annotations
- Differences Between Spring Data JPA
findFirst()
andfindTop()
- I started a new Java and Spring-focused YouTube channel (youtube.com/@CoffeeSoftware) with tons of new videos, including one that looks at the Spring Java Format plugin, another looking at how to use PostgreSQL as a message queue with Spring Integration, another that looks at RabbitMQ, and another that looks at using the Esper Complex Event Processing engine – check it out!
- Extracting a Custom Header From the Request in Spring MVC
- Interesting new filters on Spring Cloud Gateway 4.0
- Set up and observe a Spring Boot application with Grafana Cloud, Prometheus, and OpenTelemetry
- A Bootiful Podcast: Mario Fusco, the Drools rules engine project lead and fellow Java Champion
- Complex Event Processing with Esper and Spring Boot
- Spring Boot Multi-tenant Architecture Overview
- Spring Data 2022.0.1 and 2021.2.7 available
- Spring Framework 5.3.25 available now
- Spring Framework 6.0.4 available now
- Spring MVC – Mapping the Root URL to a Page
- Spring Shell 2.1.5 and 3.0.0-RC1 are now available
- Easy JVM Observability with the JCMD CLI
- This is super cool: GraalVM Native Image meets RISC-V Even cooler? The implementation might pave the way for GraalVM compilation to WebAssembly… Imagine, friends. One day, through the magic of open source, we could compile a Spring Boot application to WebAssembly. What a time to be alive!
- Implementing Retry In Kafka Consumer
- Records Are Here! Can We Remove Lombok Already?
- Release v6.0.0-M0 · jobrunr/jobrunr. First milestone. This release also supports Spring Authorization Server
- Flyway Out of Order Migrations
- The first one looks at the Spring AOT support
- this one looks at the Spring Java Formatter plugin
- this one looks at using PostgreSQL as a message queue with Spring Integration
- our pal Maciej has a new CLI called
just
which endeavors to make life easier for Spring Boot developers. InfoQ has a nice writeup; check it out! - Amigoscode has a nice video introducing Spring Boot 3 and Spring Security 6 for JWT authentication and authorization. Check it out!
- The In28Minutes channel has an introduction to versioning a Spring Boot REST API, too
- A Bootiful Podcast: Spring legend Ramnivas Laddad
- Difference Between JPA and Spring Data JPA
- Encoding of URI Variables on RestTemplate
- Spring Tools 4.17.1 released
- The Java Techie channel has a video looking at how to do dynamic file upload using Spring Batch
- First, I'll be speaking at the Atlanta JUG on the 16th of this month, by the by, so please join me, and we'll dive headfirst into Spring in 2023!
- Last week, I had the pleasure of interviewing my friend, and teammate, the legendary DaShaun Carter on a Bootiful Podcast
- I love this post by Rafael Winterhalter (create of ByteBuddy and Bootiful Podcast guest on the amazing publish/subscribe capabilities of PostgreSQL. I love PostgreSQL. But then he goes even further, turning the mechanism into support in Spring Integration. He explains everything in this epic post, Using Postgres as a Message Queue
- Create a new Git branch with no history – not strictly speaking Spring-related, but I thought it was interesting. Unless you're not using Git… I suppose.
- NonUniqueResultException in Spring Data JPA
- Observability with Spring Boot 3
- Oddity with
shutdown
methods in Spring Boot 3 AOT and GraalVM - Spring Boot (3) Spring Native (GraalVM) with Kubernetes & Istio?
- Using Watermarks with iText in Java
- Blog: Kubernetes 1.26: Job Tracking, to Support Massively Parallel Batch Workloads, Is Generally Available
- Blog: Kubernetes v1.26: Advancements in Kubernetes Traffic Engineering
- Blog: Kubernetes v1.26: Alpha support for cross-namespace storage data sources
- Spring Boot 2.7.7 available now
- Spring Boot 3.0.1 available now
- Spring Boot: Integration Tests For REST APIs with Testcontainers, WebFlux and MonogoDb
- Spring Modulith 0.2 released
- A Bootiful Podcast: Field CTO and Chief Evangelist at Gradle Justin Reock
- I built a A Github Action to export your project's Java version as a variable. Just use it from your Github Actions (Maven only, at the moment) project and it'll export the version of Java as an environment variable or as a step output, either of which you can then use in the
setup-java
Github Action. - Using Micrometer to trace your Spring Boot app
- This is an absolutely brilliant blog using Spring Integration and JDBC to use PostgresQL as a message bus
- What Are the New Features of Spring Boot 3?
- I also wrote down the steps I follow to build a modern Github Actions in the world of Spring Boot 3, since I was doing so many upgrades and needed a standardized recipe. While this works just fine with Apache Maven, I'm starting to think it might be time for me to learn Gradle, so that I can have an easier time doing things consistently across a project. Stay tuned.
- Run Multiple Commands in Docker Run
- The GraalVM github action is now verified! Are you using it?
- Why Picnic picked Java. Picking a tech stack for your startup… | by Sander Mak | Dec, 2022 | Picnic Engineering
- Blog: Kubernetes 1.26: Pod Scheduling Readiness
- Blog: Kubernetes 1.26: Support for Passing Pod fsGroup to CSI Drivers At Mount Time
- Blog: Kubernetes v1.26: CPUManager goes GA
- Blog: Kubernetes v1.26: GA Support for Kubelet Credential Providers
- A Bootiful Podcast: Microsoft's Brian Benz on the state of Java, Microsoft, Azure, and so much more
- Spring Framework 6.0.3 available now
- Spring Security 6.0.1, 5.8.1, 5.7.6 and 5.6.10 available now
- Spring for Apache Pulsar 0.1.0 available now
- Spring for GraphQL 1.1.1 released
- Fixing the No Main Manifest Attribute in Spring Boot
- Oracle has a nice post: Go Native with Spring Boot 3 and GraalVM
- Baeldung has an interesting tutorial on Pinpoint, which looks to be a large APM suite with some interesting capabilities.
- Stream Large Byte[] to File With WebClient
- Blog: Kubernetes 1.26: Alpha API For Dynamic Resource Allocation
- Blog: Kubernetes 1.26: Device Manager graduates to GA
- Blog: Kubernetes 1.26: Introducing Validating Admission Policies
- Blog: Kubernetes 1.26: Non-Graceful Node Shutdown Moves to Beta
- Running Multiple Thread Groups in JMeter
- Extract Values using AssertJ in Java
- Interesting, and well worth bookmarking: how to build a statically linked or mostly-statically linked native executable with GraalVM
- A Bootiful Podcast: Vaadin's Marcus Hellberg on rich UIs, Spring Boot 3, GraalVM native images, and more
- A Guide to Spring CredHub
- Do more with Azure Spring Apps – scale to zero and enhance productivity
- Form Login and Basic Authentication in springdoc-openapi
- Getting Started with Blaze Persistence
- Guide to Java PriorityQueue
- Java Generics PECS – Producer Extends Consumer Super
- RSocket Security with Spring Boot via Spring Security | VMware Tanzu Developer Center
- Rate Limiting With Client IP in Spring Cloud Gateway
- Reinitialize Singleton Bean in Spring Context
- a very important release – v3.0.0 – of the
rickroll-security-spring-boot-starter
· TomCools/rickroll-security-spring-boot-starter! - Running Spring Boot Applications with the Embedded Camunda Engine
- Securing RSocket TCP with TLS | VMware Tanzu Developer Center
- Spring Cloud Data Flow version 2.10.0 released
- Spring Dependency Injection | VMware Tanzu Developer Center
- Spring Tools 4.17.0 released
- Tracing a Reactive Kotlin App with Spring Cloud Sleuth | VMware Tanzu Developer Center