Learn about the Gatherer interface, understand the challenges it solves and the features it provides.
Also find me here:
Baeldung Editor
Saajan Nagendra
Saajan is an architect with deep experience building systems in several business domains. With a clean and minimalist approach to design, he is passionate about code – the aesthetics of it, and creating maintainable and flexible solutions. He enjoys both sharing with and learning from others.
Here's what I've reviewed (so far):
Baeldung on Java
- All
- Testing (34)
- Java (28)
- Core Java (24)
- Spring Boot (15)
- Java String (15)
- Persistence (13)
- Data (12)
- Spring (11)
- Java Streams (11)
- Java Numbers (11)
- Java Concurrency (11)
- Java IO (10)
- Java Dates (10)
- Jackson (10)
- Security (9)
- REST (9)
- Java Collections (8)
- Spring Security (7)
- Java List (7)
- JPA (7)
- Web Services (6)
- Spring Data (6)
- Networking (6)
- Java Array (6)
- DevOps (6)
- Algorithms (6)
- Reactive (5)
- Logging (5)
- Java Map (5)
- XML (4)
- Spring WebFlux (4)
- NoSQL (4)
- Maven (4)
- Java Web (4)
- JVM (4)
- Gradle (4)
- Spring Web (3)
- Spring MVC (3)
- Jakarta EE (3)
- IDE (3)
- Spring Cloud (2)
- JSON (2)
- HTTP Client-Side (2)
- Cloud (2)
- Artificial Intelligence (2)
- Architecture (2)
- Spring Persistence (1)
- Groovy (1)
- Docker (1)
How to Use Maps in Protobuf
Filed under Data, Networking
Explore how to define, serialize, and deserialize Protobuf maps in Java, ensuring data remains compact and easily transferable.
How to Fix H2 Console Not Showing in Browser With Spring Boot
Filed under Persistence, Spring Boot
Learn how to resolve the H2 console blank page issue by configuring the X-Frame-Options header in Spring Security.
Introduction to Apache Kylin
Filed under Data
Explore Apache Kylin, a purpose-built tool for extreme scale and performance in big data analytics.
Set Multiple Headers at Once in Spring WebClient
Filed under Spring WebFlux
Explore how Spring WebClient handles headers and learn several ways to set multiple headers.
How to Check if Zookeeper Is Running or up From Command Prompt?
Filed under DevOps, Networking
Explore the installation options for ZooKeeper and find out ways to check if a ZooKeeper node is running or not.
Connect Java Spring Boot to Db2 Database
Filed under JPA, Spring Boot
Learn how to set up an IBM Db2 database and connect to it using the Db2 driver in a Spring Boot application.
Closing Scanner in Java
Filed under Java IO
Learn why closing a Scanner is important and how to do it correctly.
Comparing Java Stream and Flux.fromIterable()
Filed under Java Streams, Reactive
Explore the similarities and key differences between Java’s Stream and Reactor’s Flux.fromIterable().
Baeldung on Linux
- All
- Scripting (67)
- Administration (60)
- Files (33)
- Processes (25)
- Networking (24)
- File Editing (19)
- Security (13)
- Installation (13)
- File Viewing (10)
- Package Management (9)
- Building (8)
- Filesystems (7)
- Network Configuration (6)
- File Searching (6)
- File Compression (6)
- Text Processing (4)
- Service Management (4)
- Network Monitoring (4)
- Docker (4)
- Web (3)
- File Permissions (3)
- User Administration (2)
- Search (2)
- File Conversion (2)
The Linux Kernel
Filed under Administration
Explore the Linux kernel, from its core role within the operating system to the mechanisms it uses to manage processes, memory, file systems, and hardware.
Solve Error “rm cannot remove path : device or resource busy” in Linux
Filed under Files
Learn how to resolve the rm command error: “device or resource busy”.
Tomcat Is Running, but Port 8080 Is Not Responding on Linux
Filed under Administration, Network Configuration
Learn how to ensure the Tomcat TCP port responds correctly to local and remote user requests.
Finding SCSI Device IDs in Linux
Filed under Administration
Learn how to find SCSI device IDs using Linux commands.
Creating a Database Using C Programming in Linux
Filed under Filesystems, Scripting
Build from scratch a simple yet handy command-line database in C that uses JSON files in its data store.
How to Fix a Script Not Working in Crontab
Filed under Scripting
Learn how to fix the most common crontab issues.
How to Check if a Server Is Running in Linux
Filed under Network Monitoring
Learn various Linux commands to check if a server is up and running.
How to Autoinstall Ubuntu Linux on a Device Without a Screen or a Keyboard
Filed under Installation
Understand the step-by-step process of creating an unattended Ubuntu installation ISO for devices without a display or keyboard.
How to Сheck if a Computer Is a Desktop or a Laptop From the Command Line
Filed under Administration
Explore the hostnamectl and dmidecode commands for checking if a computer is a laptop or a desktop.
Baeldung on Scala
- All
- Scala Collections (4)
- Libraries (2)
- Scala Web (1)
- Scala Strings (1)
- Scala Numbers (1)
- Scala Basics (1)
- Play Framework (1)
- Persistence (1)
- Akka (1)
Sorted Sets in Scala
Filed under Scala Collections
Explore SortedSet and learn how to keep elements in a specific order through natural ordering or a provided comparator.
Serving Static Assets in Play
Filed under Play Framework, Scala Web
Learn how to serve static assets like images, CSS, and JavaScript in a Play application.
Introduction to Kafka With Scala
Filed under Libraries
Explore Kafka using Scala and learn how to produce and consume messages on a topic.
Introduction to Spire
Filed under Libraries, Scala Numbers
Learn about Scala Spire, a library that provides performant and generic numeric types.
Difference Between tell and forward in Akka Actor
Filed under Akka
Learn the difference between the tell() and forward() methods of Akka Actors.
Introduction to Skunk – Scala Driver for PostgreSQL
Filed under Persistence
Learn the basics of Skunk, a purely functional Scala driver for PostgreSQL.
Scala Interview Questions
Filed under Scala Basics
Explore some of the basic Scala questions that could come up in a technical interview for Scala developers.
Initializing an Array in Scala
Filed under Scala Collections
Learn multiple approaches for initializing an array in Scala.
Copy an Array to Another in Scala
Filed under Scala Collections
Learn various approaches for copying the elements of an array into another in Scala.
Baeldung on Computer Science
- All
- Programming (1)
- Networking (1)
- Artificial Intelligence (1)
Different Types of DNS Records
Filed under Networking
Understand the common DNS record types that can be encountered in domain management.
Neurons in Neural Networks
Filed under Artificial Intelligence
Explore the structure and functioning of artificial neurons in neural networks and understand deeply the architecture of a neural network, its layers, and their several important benefits.
What Is the Difference Between Signed and Unsigned Variables?
Filed under Programming
Understand how numbers are represented in binary and learn the differences between signed and unsigned variables.
Baeldung on Kotlin
- All
- Spring (3)
- Kotlin Strings (3)
- Kotlin Collections (3)
- Libraries (2)
- Kotlin Server-Side (2)
- Kotlin Classes and Objects (2)
- Kotlin (2)
- Functional Programming (2)
- Testing (1)
- Patterns (1)
- Kotlin Numbers (1)
- Kotlin Dates (1)
- Kotlin Basics (1)
- HTTP Client-Side (1)
Difference Between “*” and “Any” in Kotlin Generics
Filed under Kotlin Collections
Find out the differences between Any and * when using Kotlin generics and understand how to utilize them effectively.
Differences Between takeWhile() and transformWhile() in Kotlin
Filed under Functional Programming
Find out the differences between takeWhile() and transformWhile(), and understand where and how we can use these functions.
API Versioning With Kotlin and Spring Boot
Filed under Spring
Learn how to implement API versioning in a Spring Boot application using Kotlin.
equals() and hashCode() Generator in Kotlin
Filed under Kotlin
Explore how the equals() and hashCode() methods are generated for Kotlin’s data classes.
Convert Any to Int in Kotlin
Filed under Kotlin Classes and Objects
Learn various ways to convert a variable of type Any to an Int and understand why this requires careful consideration of the data at hand.
Strategy Design Pattern in Kotlin
Filed under Patterns
Explore the Strategy design pattern in Kotlin and understand the problem that the pattern solves.
Functional Error Handling in Kotlin
Filed under Functional Programming
Learn how to develop recovery logic in a structured way using functional error handling.
Working With Pair in Kotlin
Filed under Kotlin Collections
Learn how the Pair class works in Kotlin.
Check if a Character Is Alphabetic or Not in Kotlin
Filed under Kotlin Strings
Explore various techniques to determine if a character is alphabetic in Kotlin.
Baeldung on Ops
- All
- Docker (6)
- Kubernetes (3)
- Jenkins (2)
- DevOps (2)
- Git (1)
- Deployment Tools (1)
Using a Jenkins Pipeline to Checkout Multiple Git Repos Into Same Job
Filed under Jenkins
Learn how to checkout multiple Git repositories into separate subdirectories in the same Jenkins pipeline.
Merge Strategies in Git
Filed under Git
Explore Git’s merge strategies, from fast-forward and non-fast-forward merges to advanced strategies like recursive, octopus, subtree, and merge-ort.
Unable to Delete PersistentVolumeClaims
Filed under Kubernetes
Understand the common causes and solutions for the issue of being unable to delete PVCs in Kubernetes.
How to Install certbot Plugins
Filed under DevOps
Learn how to install plugins that extend the capabilities of a certbot.
Edit a Kubernetes Deployment Without Modifying the File Manually
Filed under Kubernetes
Learn how to edit a Kubernetes Deployment object on the fly without using the original declarative configuration file.
Introduction to the Pants Build Tool
Filed under DevOps
Learn the basic functionality of the Pants build tool and understand its usage.
How to Get the List of Dependent Child Images in Docker
Filed under Docker
Learn how to get the list of dependent child images of a Docker image.
Difference Between targetPort and port in Kubernetes Service Definition
Filed under Kubernetes
Understand the differences between port and targetPort in Kubernetes and learn how to configure them correctly to ensure effective communication between Services and pods.
Run Multiple Commands in Docker Run
Filed under Docker
Learn how to run multiple commands on the startup of a Docker container.
Baeldung on SQL
- All
- SQL Queries (10)
- Database Concepts (3)
- DML (3)
- SQL Functions (2)
- Database Access (2)
- SQL Operators (1)
- DDL (1)
How Do I Connect to a SQL Database in Python?
Filed under Database Access
Learn how to connect to a MySQL database from Python.
What Does Collation Mean in SQL?
Filed under Database Concepts
Explore the concept of collation in SQL databases and understand how it affects text comparison and sorting.
Insert Into a SQL Table or Update if the Row Exists
Filed under DML
Explore inserting a row into a SQL table or updating the row if it already exists.
When to Use Equals (=) vs. LIKE in SQL Queries
Filed under SQL Queries
Explore the differences between the Equals (=) and LIKE operators and understand how they differ between MySQL, MSSQL, and PostgreSQL.
Difference Between CTE and Subquery
Filed under SQL Queries
Explore and understand, with practical examples, the differences between Common Table Expressions(CTEs) and subqueries.
Selecting Dates Within a Range Using SQL Queries
Filed under SQL Queries
Explore how to effectively select dates within a range using SQL queries.
Natural vs. Surrogate Keys in Database
Filed under Database Concepts
Explore the concepts of natural and surrogate keys and their ideal use cases.
SQL WHERE Condition for “Not equal to”
Filed under SQL Queries
Explore the intricacies of using the WHERE condition for the “Not equal to” query.
Creating Temporary Tables in a SELECT Statement Without a Separate CREATE TABLE
Filed under SQL Queries
Learn how to create temporary tables directly within a SELECT statement in SQL.