Ho già avuto problemi come questo quando il database si trova su una scatola separata e c'è un firewall in mezzo al quale è impostato il timeout delle connessioni inattive.
In alcune circostanze il firewall interrompe la connessione in modo tale che l'estremità JDBC non la rilevi e il tentativo di utilizzarlo provoca un blocco indefinito.
Nel mio caso si trattava di un pool di connessioni personalizzato che inviava una query di test lungo la connessione prima di restituirla dal pool. Ho configurato questa query di test in modo che abbia un timeout (usando Statement.setQueryTimeout) in modo che non si blocchi indefinitamente.