2017-01-30 2 views
0

Wie können Sie Tomcat zu Not Datenbankverbindungs-Pooling konfigurieren?So konfigurieren Sie Tomcat, um das Datenbankverbindungs-Pooling nicht zu verwenden

Ich möchte dies tun, weil ich eine Anwendung habe, die sehr wenige Aufrufe an die MySQL-Datenbank, in der Regel weniger als 10 in einem Zeitraum von 24 Stunden und einige Anrufe beim Abrufen der Verbindung fehlschlagen. Es scheint, dass Mysql die Verbindung manchmal aufgibt, weil es so lange inaktiv war, ohne dem Datenbankpooler zu sagen.

Bemerkenswert, dass ich eine andere Anwendung habe, die tausende von Anfragen an genau die gleiche Datenbank sendet und dies niemals fehlschlägt, also bin ich überzeugt, dass das Problem mit der Seltenheit von Aufrufen der Datenbank zusammenhängt. Mysql ist wahrscheinlich ein Teil des Problems, aber die Aktualisierung auf Postgres wäre eine größere Aufgabe, als ich jetzt begehen möchte.

Also habe ich versucht context.xml zu testWhileIdle Konfiguration, aber es ist stil

<Context path="/store" privileged="true"> 
    <Resource name="jdbc/myapp" auth="Container" type="javax.sql.DataSource" 
       maxActive="100" maxIdle="100" maxWait="10000" testWhileIdle="true" 
       username="usrnm" password="pwd" driverClassName="com.mysql.jdbc.Driver" 
       url="jdbc:mysql://localhost:3306/myapp"/> 

</Context> 

So, jetzt will ich versagt jedes Mal seines so bekommt eine neue Verbindung deaktivieren Pooling aber ich kann nicht herausfinden, wie es zu tun, Ive sah

https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#Plain_Ol%27_Java

aber alles scheint Datenbank Pooling zentriert geführt werden.

Versuchte Lösung

Also habe ich versucht Vorschlag in Antwort und werden sehen, was sollten Sie nächsten Tagen geschieht über

 <Context path="/store" privileged="true"> 
      <Resource name="jdbc/myapp" auth="Container" type="javax.sql.DataSource" 
         maxActive="10" maxIdle="10" 
    testWhileIdle="true" validationQuery="select 1" validationQueryTimeout="5" 
         username="usrnm" password="pwd" 
driverClassName="com.mysql.jdbc.Driver" testOnBorrow="true" 
         url="jdbc:mysql://localhost:3306/myapp"/> 

     </Context> 

Antwort

0

Nichts Ihre eigenen Verbindungen von Herstellung und deren Verwendung werden zu verhindern. Aber ich denke, dass Sie die Konfiguration vermissen, um die Verbindungsvalidierung ordnungsgemäß durchzuführen. Wenn eine Verbindung getestet und für schlecht befunden wird, sollte sie durch eine neue ersetzt werden, bevor der Pool die Verbindung herstellt. Ich denke, Sie fehlen ValidationQuery, die beim Testen der Verbindung verwendet werden würde. Sehen Sie sich die Dokumentation unter https://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html an und sehen Sie sich die erforderlichen Werte an, damit die Validierung funktioniert. Probieren Sie testOnBorrow und validationQuery aus, damit jedes Mal, wenn Sie eine Verbindung herstellen, diese vor der Rückkehr validiert wird. Außerdem scheinen Sie zu viele Verbindungen basierend auf Ihrer Nutzungshäufigkeit einzurichten. Das Abstimmen sollte helfen, unnötige Verbindungen zu vermeiden.

+0

Ich möchte nicht die tomcat db Verbindungskram umgehen Ich will es nur so konfigurieren, dass es eine neue Verbindung jedes Mal erstellt, wenn eine Anfrage gemacht wird, nicht klar, ob dies möglich ist, aber Ill versuchen Sie die ValidierungQuery Sie haben Recht Dort. –

+0

@PaulTaylor Ich glaube, der Titel hat mich abgewimmelt, dachte, du wolltest das Pooling nicht nutzen. – NinePlanFailed

+0

Sorry, ich meinte, ich wollte Tomcat nicht zum Db-Verbindungen Pool, trotzdem habe ich Änderungen beschrieben und es hat noch nicht so versagt, Daumen drücken. –

Verwandte Themen