Introduction 📝
In this edition, we explore key topics shaping the future of Java and Jakarta EE. From practical insights into memory leaks caused by ThreadLocal variables, to the latest advancements in null safety with JSpecify in Spring, and innovative functional programming techniques beyond Java Streams — this issue is packed with valuable knowledge for Java developers.
We also cover the evolution of Enterprise Java, highlighting Jakarta EE 11 features and a sneak peek into Jakarta EE 12’s roadmap for 2026, including support for Java 21+, Jakarta NoSQL, and improvements to Jakarta MVC.
Stay updated with the latest trends, tools, and best practices in the Java ecosystem. Subscribe to the newsletter
🚀 Java + Spring Boot + SQL Interview + Certification Prep 🚀
🎯 Perfect for aspiring developers, job switchers & interview prep warriors!🔥 What’s Inside (PDF format):
Grokking the Java Interview (Vol 1 & 2)
Grokking the Spring Boot Interview
Grokking the SQL Interview
Java SE 17 Developer Certification (1Z0-829) Guide
250+ Spring Framework Certification Practice Questions
Top Picks ⭐
Memory Leak Due to Uncleared ThreadLocal Variables
This article explains how improper use of
ThreadLocal
Variables in Java can lead to memory leaks, particularly in environments with long-lived or pooled threads like servlet containers or thread pools.When a
ThreadLocal
is not explicitly cleared usingremove()
Its associated value may remain in memory even after it’s no longer needed, because the thread—and thus the thread-local map—persists.This can eventually cause an
OutOfMemoryError
. The article demonstrates this with a sample program and advises usingthreadLocal.remove()
it inside afinally
block to ensure proper cleanup and avoid such leaks.
Null Safety in Java with JSpecify and NullAway by Sébastien Deleuze @ Spring I/O 2025
The Spring team is introducing JSpecify annotations across the entire Spring ecosystem (Framework, Data, Boot, Security, AI) to bring strong null safety to Java and Kotlin developers. This helps catch null-related bugs at compile time and drastically reduce runtime
NullPointerException
s.Because Java doesn’t yet fully support lazy initialization in a null-safe way, some workarounds like suppressing warnings are currently needed, but future Java versions (targeting Java 25+) will add stable value types that solve this properly.
Constructor-based initialization is encouraged for safer, clearer code. This effort is a large team collaboration and will be a major feature in Spring Boot 4 and Spring Framework 7.
The speaker highlights the historic cost of null-related bugs (“billion/trillion-dollar mistake”) and sees this as a transformational shift—turning nullability from a liability into a safe, checked feature.
Future JVM enhancements (Project Valhalla) will bring native support for restricted types (non-nullable types), and there may be bridges between GSpecify annotations and those runtime features.
Beyond Java Streams: Exploring Alternative Functional Programming Approaches in Java
This article explores modern functional programming techniques in Java, emphasizing how features like lambdas, method references, the Stream API, and
Optional
enable more concise and expressive code.It also introduces libraries like jOOλ and Vavr, which add powerful functional constructs such as tuples, pattern matching, and monads (
Either
,Try
).Additionally, it highlights function composition and asynchronous programming with
CompletableFuture
, encouraging developers to adopt these tools for cleaner, more modular Java code.
Latest 🔥
Using Profiles to Separate Dev and Test Beans in Spring Boot
This article explains how to use Spring Boot’s
@Profile
annotation to define environment-specific beans, such as separate implementations for development and testing.By activating profiles like
dev
ortest
, Spring loads only the relevant beans, enabling cleaner code and easier environment configuration usingapplication.yml
, command-line flags, or annotations like@ActiveProfiles
in tests.
Writing a Custom Validator in Spring Boot With Bean Validation
This article explains how to create a custom validator in Spring Boot using Bean Validation (JSR-380). It walks through defining a custom annotation, implementing the
ConstraintValidator
interface, and applying the annotation to a model field.This helps enforce domain-specific rules, such as checking that a string contains only uppercase letters. The author emphasizes clean separation of concerns and reusable validation logic.
Pageable in Spring Boot Is Powerful — But Here’s Where It Breaks Down
The article discusses the power and pitfalls of using
Pageable
in Spring Boot for pagination. While it simplifies pagination by handling page requests and metadata automatically, issues arise with default settings, unexpected behavior in edge cases (like page index overflow), and lack of validation for page parameters.The author highlights the need for customizing or validating
Pageable
inputs to avoid subtle bugs and improve API robustness.
How ReadyNow Improves Java Warmup Time
Theis article explains how ReadyNow, a feature of Azul Zing (part of Azul Platform Prime), dramatically improves Java application warmup performance. Rather than relying on JIT compilation during each startup, ReadyNow records previous runs’ compilation decisions into a profile file.
On subsequent launches, the JVM uses this profile to preemptively compile the hot code paths, eliminating warmup time and avoiding de-optimizations.
Training multiple runs refines the profile, further enhancing startup speed. Unlike CRaC, no code changes are needed—just configure the JVM to read/write the profile
Performance Best Practice No. 1: Optimize Database Operations
This article emphasizes that optimizing database operations is crucial for Jakarta EE performance. It highlights best practices like using connection pooling, reusing prepared and cached statements, enabling JDBC/JPA batching, and tuning connection pool sizes.
These techniques help reduce latency, avoid unnecessary overhead, and improve application efficiency—especially in database-heavy workloads.
Faster Java Warmup: CRaC versus ReadyNow
This article compares Java warm-up solutions: CRaC snapshots the full JVM state to instantly resume execution, eliminating warm-up, while ReadyNow pre-compiles hot code based on past runs to speed up startup without state capture. CRaC offers faster restarts but is more complex; ReadyNow is simpler and JVM-only.
Guide to Java Diff Utils
This article introduces the Java Diff Utils library, which facilitates comparing and patching text content line-by-line. It covers core classes like
DiffUtils
,Patch
, andUnifiedDiffUtils
, demonstrating how to compute differences, apply patches, and generate unified diffs.The guide includes practical examples for comparing files and strings, making it a valuable resource for developers needing to implement text comparison functionalities in Java applications.
Spring Cloud Gateway vs. Netflix Zuul 2: Which API Gateway Should You Use in 2025?
This article compares Spring Cloud Gateway (SCG) and Netflix Zuul 2 as API gateways in 2025. SCG outperforms Zuul 2 in performance, offering 1.8–2x higher throughput, lower CPU usage, and better latency distribution.
It supports modern protocols like HTTP/2 and WebSockets, integrates seamlessly with Spring ecosystems, and offers robust observability through Micrometer and Prometheus. Zuul 2, while still relevant for legacy Netflix OSS setups, consumes more CPU and has limited observability features.
For new or cloud-native applications, SCG is the recommended choice.
Understanding the Difference Between Filters and Interceptors in Spring Boot
This article explains the difference between filters and interceptors in Spring Boot. Filters are part of the Servlet API and work at the web container level, processing requests and responses before reaching controllers.
Interceptors belong to the Spring framework and operate at the handler level, allowing pre- and post-processing of controller method calls.
Filters are good for cross-cutting concerns like logging or security, while interceptors are better suited for manipulating handler execution and responses within the Spring context.
Resilience4j Circuit Breakers in Spring Boot 3
This article explores implementing Resilience4j circuit breakers in Spring Boot 3 to enhance microservice resilience. It provides a modular approach to fault tolerance, integrating patterns like Circuit Breaker, Retry, Rate Limiter, and Bulkhead without the overhead of older solutions like Hystrix.
The guide includes setup instructions, configuration examples, and code snippets to demonstrate how to apply these patterns effectively in modern Spring Boot applications
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
The speaker showed a Jakarta EE app running on Open Liberty using Jakarta Data and JPA with a fast dev loop, demonstrating database CRUD operations.
Then, they discussed Jakarta EE 12 (summer 2026) plans: Java 21+ support, Jakarta NoSQL, Jakarta MVC improvements, and ideas like CRaC integration and replacing EJBs with CDI.
Finally, they covered the Jakarta namespace migration and shared resources for learning and migration tools.