Le pool de connexions JDBC ne pas rouvrir les connexions dans Tomcat
J'ai configurer Tomcat pour utiliser un pool de connexions et pourtant, après le MySQL délai d'attente sur les connexions les connexions déjà ouvertes dans la piscine ne sont pas ouverts. Voici ce que ma context.xml fichier ressemble à ceci:
<Resource name="jdbc/hpsgDB" auth="Container" type="javax.sql.DataSource"
maxActive="5" maxIdle="3" maxWait="10000"
username="uname" password="password" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/hpsgdb?autoReconnect=true"/>
Comme vous pouvez le voir, j'ai inclus autoReconnect comme vrai mais il ne le fait pas. J'ai vérifié les processus sur la base de données après 8 heures, ce qui est ce que le temps est réglé.
OriginalL'auteur Dean | 2009-12-08
Vous devez vous connecter pour publier un commentaire.
Essayez d'ajouter une requête de validation de l'attribut. Cela devrait avoir pour effet de automatiquement la fermeture et la réouverture de la connexion après un délai d'attente comme ceci:
validationQuery n'est pas assez. Veuillez lire: leakfromjavaheap.blogspot.com/2013/11/...
testWhileIdle
ettest-on-borrow
les propriétés de l'utilisation validationQueryOriginalL'auteur zznate
D'abord, se débarrasser de la
autoReconnect
de la propriété. Vous n'avez pas besoin de ce avec un pool de connexion et peut causer des problèmes.Deuxièmement, assurez-vous que vous près toutes les ressources (
Connection
,Statement
etResultSet
) dans votre code JDBC dans lefinally
bloc.Je ne sais pas si cela s'applique à votre cas, mais une idée fausse commune parmi les partants, c'est qu'ils semblent penser que vous n'avez pas besoin de fermer ces ressources dans le cas d'un pool de connexions. Ce qui est inexact. Un pool de connexion est un wrapper (décorateur) autour d'une connexion qui a un peu changé
close()
méthode à peu près ressembler à çaAvec d'autres mots, la fermeture des libère le pool de connexion de sorte qu'il peut être remis dans la piscine pour une réutilisation ultérieure. Si vous acquérir des connexions sans les fermer, puis le pool de connexions, tôt ou tard.
OriginalL'auteur BalusC
Car c'est urgent et pour la production, je vous suggère d'avoir regarder une connexion décente de la piscine comme c3p0. C'est plus robuste et fiable, et peut gérer les délais d'attente de mieux.
OriginalL'auteur cherouvim
Avec votre configuration, il n'est pas censé créer une autre connexion si il est inactif. Essayez d'ajouter
Avec ce paramètre, DBCP maintiendra 3 connexions de tous les temps.
Nous voyons exactement le même comportement avec un de peu utilisé serveurs. En raison de la valeur par défaut délai d'expiration de connexion de 8 heures, nous ne voyons pas les connexions lorsque nous arrivons dans la matinée. C'est ce que nous attendions. Cependant, parfois, nous voyons vicié de la connexion et de la première demande échoue. Pour contourner ce problème, vous devez ajouter les attributs suivants,
OriginalL'auteur ZZ Coder