Blog

Collection of curated blog posts from me.

Getting started with Kestra Modern engine for business automation

In this article, I’ll share my experience with Kestra. It’s a modern workflow orchestration platform that’s become popular among developers. If you’ve worked with Apache Airflow or simlar tools, Kestra feels different. It offers a fresh take on workflow automation Introduction I’ve worked with many workflow engines. I now value tools that enhance the developer experience while still being functional. Kestra grabbed my attention. It aims to simplify complex business process automation. Plus. it keeps the flexibility needed for real-world use.

Read more →

June 26, 2025

Event sourcing with Spring Boot, Kafka and jOOQ

Events around One way of building resilient, scalable, and maintainable applications is use event sourcing. The event sourcing become a powerful architectural pattern. In classical approach we have only current state of application. On other hands in the event sourcing persist every state change as event. With this method we have complete history of changes. The complete history of changes easing debug, audit, and even reconstruction application state.

Read more →

April 5, 2025

Spring Boot Banner - Beyond ASCII art

If you’re working with Spring Boot you may see banner once your app is starting. The banner is not only decoration, but can serve as provider of helpful information. It can provide valuable information and even serve functional purposes. Let’s explore how to customize it beyond simple ASCII art. The basics: Text and image The simplest way of customization is to create banner.txt file. The banner.txt file should place in resource folder. Spring Boot picks this up and displays its content at startup. For graphic lovers, Spring Boot also Supports image - based banners. You need only add banner.jpg, or banner.png to your resource folder, and Spring Boot will convert it to ASCII art.

Read more →

April 1, 2025

Maven plugin development from basic to advanced

Extensions Introduction Ever found yourself repeating the same mundane tasks during your build process? You might be checking for SNAPSHOT dependencies before a release. You could also check code formatting or do custom verifications that regular plugins don’t handle. We developers love automation. Maven plugins help us do that. They let you tweak and customize your build process to match your project’s need. In this article, I’ll guide you through creating your own Maven plugins, from simple to a sophisticated. After I missed SNAPSHOT dependencies during a release and caused production delay, I saw that a custom Maven plugin could fix this issue for good. Why manually check when you can automate?

Read more →

March 27, 2025

Structured logging

Spring Boot 3.4 adds native support for structured logging. This makes it easier to create machine — readable logs that work well with log aggregation tools. In this quick guide, I’ll show you how to configure and use this powerful feature. What is structured logging? Traditional text — based logs are great for humans but challenging for machines to parse. Structured logging formats logs as JSON objects. These have defined fields, makint them easier to search, filter, and analyze. You can use tools like ELK Stack. Setting up structured logging

Read more →

March 23, 2025

Understanding Java Memory Model and Thread Safety

In today’s world of multiple-core processors, it is vital to know how Java manages memory and threads. This understanding helps in creating strong, high - performance applications. We often overlook basic understanding threading mechanisms as developers. But when issues arise - and they will knowing the core concepts can save your hours of debugging. Java Memory Model: More than heap and stack The Java Memory Model (JMM) defines how threads interact through memory. It’s not just about how we organize memory. It’s also about the rules that control visibility, atomicity, and the order of memory operations. When Java code runs, each thread gets its own stack, storing local variables and method call information. But all threads share the heap, which contains all objects your program allocates. This shared nature is strong but risky. It lets threads communicate, but it can lead to race conditions. The JMM, introduced in Java 5 (JSR - 133), provides guarantees about when changes made by one thread become visible to other. Before we dive into the details, let’s understand why this matters. Consider this code that appears to be harmless:

Read more →

March 20, 2025

Demystifying Java ClassLoaders - A deep dive into the JVM loading mechanism

Loading Have you ever wondered how your Java application finds all those imported classes? Or maybe you’ve faced the dreaded ClassNotFoundException and felt lost in classloader confusion? Perhaps you’ve dealt with dependency conflicts or library version issues in large applications. All these problems come from one key mechanism in Java: classloaders. In this article, I’ll take you into the exciting world of Java’s classloading. We will explore how class loaders operate. We’ll talk about their hierarchy. You’ll learn how to use them to solve real-world problems in your apps.

Read more →

March 13, 2025

Spring AOP - Understanding proxy mechanics

Under hood When I first encountered Spring AOP (Aspect - Oriented Programming), it seemed like magic. My Java code began executing extra behavior without my explicit command. Log statements showed up, transaction handled themselves, and security check happened automatically. But as with any advanced technology, the magic has a clear explanation. In this article, we will pull back the curtain on Spring AOP and explore how it uses proxy patterns to weave behavior into your applications. We will look at both the theory and practical implementations so you can make the most of this powerful feature.

Read more →

March 6, 2025

Understanding Spring Bean Lifecycle

Coffee beans, but today about different beans Introduction The Spring Framework is key for Java enterprise development. It manages “beans,” which are objects, using a smart lifecycle system. It’s important for developers to grasp this lifecycle in Spring applications. This knowledge gives them control over how resources are set up, how they behave, and how to clean them up properly.

Read more →

February 28, 2025

Building a custom Spring Boot Starter - From theory to practice

Introduction Spring Boot starters are key feature of the Spring Boot ecosystem. They simplify dependency management and auto — configuration. A starter mix of dependencies and auto — configuration.It provides specific features with little setup needed. Spring Boot offers many official starters. However, you may need to create a custom starter for reusable functionality across different projects. In this guide, we’ll look at the theory and practice fo building a custom Spring Boot starter. We’ll learn how to start working under the hood and create a real — world example that you can use as template for you own custom starter.

Read more →

February 26, 2025