Choses que vous pouvez essayer :
-
setMaxWait(-1)
sur le BasicDataSource. Cela lui dit d'attendre indéfiniment une connexion. -
Vérifiez que le
wait_timeout
sur votre serveur MySQL est défini sur la valeur par défaut 8h. -
Définir
?autoReconnect=true
sur votre URL JDBC -
setTestOnBorrow(true)
sur le BasicDataSource. Cela l'empêchera de distribuer des connexions obsolètes, mais ajoutera une surcharge à votre application (bien que si vous avez déjà de si longues requêtes uniques, vous ne remarquerez probablement même pas cette partie).
En général, je trouve que c'est une mauvaise idée de continuer à réutiliser une connexion. Pour moi, l'intérêt d'avoir une piscine, c'est que je n'ai pas à le faire.
Vos requêtes sont-elles transactionnelles ? Une requête très longue bloque-t-elle une table principale ?