Look at your connection pool definition.
You should have an option to track leaks. It works by taking a stack snapshot when you pull a Connection from the pool, and printing out the snapshot if the Connection has not been returned within a set amount of time. Knowing where you got the Connection can usually help you figure out where it's being used and where it might be getting lost. And if the path over which it's being used is too long and convoluted to follow, that in itself is a signal of probable poor design. Better to get a Connection and give it back repeatedly than to hoard it. Checking a Connection in and out of the Connection pool is a very low-overhead thing to do.
Incidentally, Spring Data, when properly used, leak-proofs Connections.