Cosas que puedes probar:
-
setMaxWait(-1)
en el BasicDataSource. Eso le dice que espere indefinidamente por una conexión. -
Compruebe que el
wait_timeout
en su servidor MySQL está configurado en el valor predeterminado 8h. -
Establecer
?autoReconnect=true
en su URL de JDBC -
setTestOnBorrow(true)
en el BasicDataSource. Esto evitará que entregue conexiones obsoletas, pero agregará una sobrecarga a su aplicación (aunque si ya tiene consultas únicas tan largas, probablemente ni siquiera notará esa parte).
En general, me parece una mala idea seguir reutilizando una conexión. Para mí, el punto de tener una piscina es que no tengo que hacer eso.
¿Tus consultas son transaccionales? ¿Alguna consulta realmente larga está bloqueando una tabla principal?