Spring Boot
Spring Boot is the Java backend framework I use the most, and the one that bites the most. These posts cover bean scopes, auto-configuration, @Transactional, security, and the surprises that show up only after a service has been running in production for a while.
Open Session in View Is Spring Boot's Quietest Footgun
Spring Boot ships with Open Session in View on by default. Lazy loading from controllers, hidden N+1s, JDBC connections pinned for the whole HTTP request.
Read more BackendFour Spring Boot 4 Features That Actually Change Your Code
Spring Boot 4 release notes are long. Four features change how you actually write code: API versioning, HTTP service clients, virtual threads, RestTestClient.
Read more BackendChecked Exceptions Were a Mistake and Spring Proved It
Checked exceptions force callers to acknowledge errors, not handle them. Spring's unchecked hierarchy and the @Transactional rollback default show the cost.
Read more BackendYour Spring Bean Is Not What You Think It Is
Spring's default bean scope is singleton. The bugs appear when a service holds mutable state, a scoped bean is misused, or ThreadLocal cleanup is skipped.
Read more BackendYour Equals and HashCode Are Wrong
Hibernate entities in a Set stop being findable after you persist them. equals and hashCode based on a null id change the moment the database assigns a value.
Read more BackendHibernate's ddl-auto Is Not a Migration Tool
ddl-auto: update silently adds columns and never drops them. What it does to your schema, why it fails on renames, and how to safely replace it with Flyway.
Read more BackendWhy Your Service Slows Down at 9am Every Day
Your service slows every morning for the same five reasons: JVM warmup, cold caches, pool growth, clustered crons, deployment timing. Here's how to fix each.
Read more BackendSpring Boot Auto-Configuration Is Magic Until It Isn't
Spring Boot configures your app without a line of config. Then it configures something you did not want. Here is how the mechanism works and how to control it.
Read more BackendThe Hibernate Query You Didn't Write
Hibernate writes SQL you never see. Three repository lines execute a 2,100-character query that is usually worse than anything you would have written by hand.
Read more BackendConnection Pool Tuning: A Practical Guide
HikariCP's defaults look sensible until your app hits production load. Here's how to actually size your connection pool using Little's Law, not guesswork.
Read more Backend@Transactional Is Not Magic
@Transactional looks simple until you hit self-invocation, wrong exception types, or silent failures on private methods. Here's what it actually does.
Read more BackendThe Java Terminology Survival Guide
Java EE, Jakarta EE, javax, SE, JDK, JRE, OpenJDK, Spring Boot, Spring MVC. A plain-language guide to every confusing name in the entire Java ecosystem.
Read more BackendConnection Pools: The Thing You Never Think About Until Production Burns
Connection pools sit quietly until they break. Here is what happens when they fail, the warning signs to watch, and how to catch it before production burns.
Read more BackendSpring Boot Security Is Hard and That's Okay
Spring Security has a brutal learning curve. The filter chain is confusing, the docs assume too much, and 403 errors haunt your dreams. But it's worth it.
Read more BackendWhy Component-Based Structure Beats Traditional Package-by-Layer in Java
Why organizing Java code by feature instead of by layer (controller/service/repository) gives you better modularity, easier navigation, and real encapsulation.
Read more BackendSpring Data Derived Queries: Crossing Boundaries
Nested traversal in Spring Data derived queries: the underscore rule, the distinct-join trap, the same-collection trap, projections, EntityGraph, streams.
Read more BackendSpring Data Derived Queries: The Single-Entity Toolkit
Spring Data writes JPQL from your method names. The full single-entity keyword set: equality, comparison, string ops, null, In, OrderBy, Top, Pageable, countBy.
Read more BackendHikariCP in Production: Tuning, Monitoring, and pgbouncer
Tune HikariCP for production Spring Boot 4 services on Postgres. Little's Law sizing, the properties that matter, monitoring signals, pgbouncer fronting.
Read more DatabaseDatabase Indexes Explained: A PostgreSQL Walkthrough With EXPLAIN ANALYZE
B-tree, composite, partial indexes proved with EXPLAIN ANALYZE on 500k Postgres rows. Plus the three ways EXPLAIN ANALYZE lies to you. Tests in the repo.
Read more Backend@Transactional Demystified: Every Attribute With Working Tests
Every @Transactional attribute explained with real working code: propagation, rollbackFor, readOnly, timeout, and isolation, each proved by a failing test.
Read more DatabaseOptimistic vs Pessimistic Locking in JPA
Two JPA strategies for preventing the lost update problem. @Version for optimistic locking, SELECT FOR UPDATE for pessimistic. Real SQL output, working tests.
Read more BackendThe Transactional Outbox Pattern in Spring Boot
Build the transactional outbox pattern in Spring Boot with Kafka: atomic writes, a polling relay, and full integration tests with Testcontainers, all working.
Read more DatabaseThe N+1 Problem: All Four Fetch Strategies Explained
A hands-on walkthrough of all four Hibernate fetch strategies with real query counts. Each fix is verified by a test that proves the N+1 problem first.
Read more