Como o DBCP mantém as conexões mysql retornadas abertas para as próximas solicitações de conexão, elas são vítimas do Tempo limite do MySQL Server .
O DBCP possui vários recursos que podem ajudar (podem ser usados a partir do Tomcat 5.5 IIRC).
validationQuery="SELECT 1"
testOnBorrow="true"
A validação garante que uma conexão seja válida antes de retorná-la para um aplicativo da web executando o método 'emprestado'. A bandeira, claro, habilita esse recurso.
Se o tempo limite (8 horas, acredito) for decorrido e a conexão estiver inativa, uma nova conexão será testada (se não houver mais, ela será criada) e fornecida ao webapp.
Outras abordagens possíveis:
-
use otestWhileIdle="true"
DBCP em suas configurações de recursos para também verificar conexões inativas antes que uma solicitação efetiva seja detectada.
-
Use as 'connectionProperties' para fortalecer sua conexão MySQL (por exemplo,autoReconnect/autoReconnectForPools=true
)