Se você estiver usando um Tomcat JNDI DataSource veja alguns dos parâmetros que você pode definir na fonte de dados, como testOnBorrow. Se a validação falhar, a conexão será descartada do pool. Há alguma sobrecarga de desempenho que você incorrerá ao testar as conexões, mas isso deve corrigir problemas como esse. Se você tiver minIdle/maxIdle definido como alto, isso explicaria por que você continua tendo o problema enquanto a reconexão o corrige para outras pessoas.