Ciò potrebbe essere dovuto al fatto che sul server db è presente un timeout per non consentire alle connessioni di vivere oltre un tempo prestabilito o di morire se non riceve qualcosa che dice che è ancora valido. Un modo per risolvere questo problema è attivare i keepalive. Questi fondamentalmente eseguono il ping del server db dicendo che sono ancora connessioni valide.
Questo è un collegamento abbastanza buono sulle configurazioni DBCP di Tomcats. Dai un'occhiata alla sezione intitolata "Prevenire le perdite del pool di connessioni dB". Potrebbe essere un buon punto di partenza.