Cosas que puedes probar:
-
setMaxWait(-1)en el BasicDataSource. Eso le dice que espere indefinidamente por una conexión. -
Compruebe que el
wait_timeouten su servidor MySQL está configurado en el valor predeterminado 8h. -
Establecer
?autoReconnect=trueen 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?