Ik heb dit soort problemen eerder gehad wanneer de database zich op een aparte box bevindt en er een firewall tussen zit die is ingesteld om inactieve verbindingen te time-outen.
In sommige omstandigheden verbreekt de firewall de verbinding op zo'n manier dat het JDBC-einde niet detecteert, en een poging om het te gebruiken resulteert in een onbepaalde blokkering.
In mijn geval was het een aangepaste verbindingspool die een testquery door de verbinding stuurde voordat deze uit de pool werd geretourneerd. Ik heb deze testquery geconfigureerd met een time-out (met behulp van Statement.setQueryTimeout) zodat deze niet voor onbepaalde tijd wordt geblokkeerd.