Engineering With Java: Digest #81
Concurrency, Extending Libraries, Event-driven design, Multiple Spring Boot Instances and more ...
👋 Java Devs! Welcome to this week’s addition (#81)! I hope you’re all doing great.
This week, we cover essential insights on:
📢 Get actionable Java/Spring Boot insights every week — from practical code tips to real-world use-case based interview questions.
Join 6200+ subscribers and level up your Spring & backend skills with hand-crafted content — no fluff.
First 100 paid subscribers will get the annual membership at $50/year forever that is ~ $4/mo ( 71 already converted to paid, 29 remaining)
🗒️ Articles Of The Week (7)
Extending Java Libraries with Service Loader : This article explains how Java libraries can be made extensible using the Service Provider Interface (SPI) and ServiceLoader, allowing external modules to plug in new implementations without modifying the core library. Implementations are registered through META-INF/services configuration files and discovered at runtime, enabling plugin-like architectures with strong decoupling between API and implementations. This approach keeps the core library stable while letting users extend functionality by simply adding new provider implementations to the classpath.
Bulkhead Concurrency Limits with Semaphores in Spring Boot : This article explains how the Bulkhead pattern can be implemented in Spring Boot using Java Semaphore to cap the number of concurrent requests accessing a resource or downstream service. By limiting permits, the system prevents overload and cascading failures, either rejecting extra requests immediately (fail-fast) or allowing brief waiting for capacity. It demonstrates implementations using Servlet filters (OncePerRequestFilter) and WebFlux filters, showing how concurrency limits protect services under heavy load.
Event-Driven Architecture in Java and Kafka : The article explains how event-driven architecture (EDA) in Java uses events to enable loosely coupled microservices, where producers emit events and consumers react asynchronously through brokers like Kafka. It highlights how tools such as Apache Kafka act as the event broker, enabling scalable workflows, real-time processing, and independent service evolution in modern distributed systems.
Running Multiple Spring Boot Instances in IntelliJ: This article explains how to run multiple instances of a Spring Boot application in IntelliJ IDEA for local testing. One approach is creating multiple run configurations with different --server.port values, while a more structured method uses Spring Profiles with separate configuration files to run instances on different ports. This allows developers to simulate multi-service interactions or test different configurations locally.
A Beginner’s Guide to Reactive Programming Concepts : This article introduces reactive programming in Spring Boot using Spring WebFlux and Project Reactor, explaining how applications process asynchronous data streams with non-blocking I/O. It highlights core abstractions like Mono (0–1 value) and Flux (0–N values) and shows how reactive systems improve scalability and responsiveness by handling many concurrent requests with fewer threads.
Kill Switches and Scheduled Flags — Feature Flags in Production (Java) : This article builds on a simple Spring Boot + PostgreSQL feature‑flag system by adding a kill switch that instantly disables any flag regardless of rollout state, and scheduled activation/deactivation timestamps so flags automatically turn on/off at defined times. It explains how to update the evaluation logic and API so overrides and timing windows are checked in the right order, improving control and safety in production flag management.
Circuit Breaker + Retry in Spring Boot: A Practical Guide with Resilience4j : This article provides a practical guide to using Resilience4j in Spring Boot to implement circuit breakers and retries for resilient microservices. It shows how to configure annotations and custom policies so that failed calls are retried a few times and then a circuit breaker opens to prevent cascading failures, improving stability under unreliable downstream services.
🔥 Recently Published In-house Blogs (4)
Spring Data Interview Question - Identify & Optimize Slow SQL Queries
Spring Data Interview Question : Efficient Keyset Pagination with Spring Data WindowIterator
Spring Boot Interview Question - Rollup Updates To Improve Database Performance
Java Interview Question - Merging Two Priority Queues
▶️ Videos of the week (3)
Java Performance Update: From JDK 21 to JDK 25 : Perr and Claus from Oracle’s Java Performance Group discussed recent JDK performance improvements, focusing on metrics like throughput, latency, startup/warm-up time, memory usage, and energy efficiency. They emphasized proper benchmarking practices using tools like JMH, accounting for JVM behavior, platform, and CPU architecture, and highlighted that even small performance gains require careful engineering.
Why Microservices Are Overkill ? Spring Modulith Fixes It ! : Spring Modulith is an approach that structures a monolithic application in a clean, modular, and scalable way, where each feature lives in its own independent module with loose coupling and asynchronous communication, allowing developers to manage and test the app easily without the complexity of full microservices
How Spring Boot Really Works (From a Core Engineer) : The speaker, a longtime Spring fan, joined the Spring team after debugging memory issues with Spring Native, which was later integrated into Spring Boot. They share their journey from early programming in QBasic and .NET to full-time Spring development, explaining how GraalVM and Project Leyden enable native images with much faster startup times and how Spring ensures compatibility with these technologies.
🧑💻 Jobs of The Week (78)
Check the full listing here ( 78 openings across globe )
Thats all for this week! Thanks for reading this far. If you liked it please share with your network.
Happy Coding 🚀
Suraj
Subscribe | Sponsor us | LinkedIn | Twitter



