И преди съм имал подобни проблеми, когато базата данни е в отделна кутия и има защитна стена между тях, която е настроена на изчакване на неактивни връзки.
При някои обстоятелства защитната стена прекъсва връзката по такъв начин, че краят на JDBC да не открива и опитът да се използва води до неопределен блок.
В моя случай това беше персонализиран пул за връзки, който изпрати тестова заявка надолу по връзката, преди да я върне от пула. Конфигурирах тази тестова заявка да има изчакване (използвайки Statement.setQueryTimeout), така че да не блокира за неопределено време.