2009-07-21 11 views
1

J'ai décidé d'utiliser DBCP principalement parce que je recevais des délais d'attente sur mes connexions de base de données. En théorie, une fois que vous définissez une "requête de validation", DBCP exécutera par défaut cette requête sur la connexion avant de l'utiliser, donc vous saurez toujours que la connexion est OK. Je l'ai mis en place il y a deux semaines et cela a semblé fonctionner. Cependant, la nuit dernière j'ai reçu une exception de timeout sur une connexion.Problème de validation de connexion DBCP

Sur ma machine de développement, le code survit à un redémarrage de MySQL sans problème, donc je suppose que DBCP fait.

Comment devrais-je procéder à l'analyse? Utilisez-vous DBCP à cette fin?

(Juste supprimé 50 lignes ou plus de plus de détails, en essayant de garder la question lisible.Laissez-moi savoir si certaines informations cruciales manquent).

EDIT: Je suppose que ai lu this question avant que je commence ...

Répondre

1

Ce n'est pas toujours vrai. J'ai rencontré des problèmes similaires, mais il s'est avéré que DBCP a un comportement par défaut qui n'est pas très bien documenté.

Vous devez définir l'intervalle entre les cycles d'expulsion pour purger les connexions inactives. Cela peut être défini sur un objet SharedPoolDataSource en appelant setTimeBetweenEvictionRunsMillis. Si cela n'est jamais défini, la valeur par défaut est négative et le thread ne s'exécute jamais!

+0

Même si les connexions inactives ne sont pas purgées, la requête de validation ne doit-elle pas être exécutée pour s'assurer que la connexion est toujours active? – itsadok

+1

Est-ce que testOnBorrow() est défini sur true? –