Lazy JDBC Connections in Spring Boot 4.1 (Performance Win)
Every time a @Transactional method runs in your Spring Boot application, Spring grabs a JDBC connection from the pool. Immediately. Before your code even executes. Before it knows whether you'll actually touch the database. That connection sits there, reserved for you, doing absolutely nothing — while some other thread might be blocked waiting for a free connection. Your Hibernate second-level cache just returned the result from memory? Doesn't matter. Connection was already checked out. That's the equivalent of renting a car to walk across the street.
Spring Boot 4.1 fixes this with first-class support for lazy JDBC connections. One property. Massive performance win.
In this post we'll look at:
- The problem with eager connections — why Spring grabs a connection before you need one
- What
LazyConnectionDataSourceProxydoes — the mechanism behind lazy fetching - Spring Boot 4.1's auto-configuration — enabling it with a single property
- Before vs after — what you had to do manually (and why nobody bothered)
- Real-world scenarios where this shines — cache hits, conditional logic, and read/write routing