Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie vermeide ich blockierte DB-Verbindungen mit dem JDBC-Verbindungspool von TomEE?

Ich verwende erfolgreich eine resources.xml in meiner WEB-INF Ordner ähnlich wie dieser in meinen Produktionsprojekten:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<Resource id="mysql-jdbc-jta-resource-stg" type="javax.sql.DataSource">
    JtaManaged = true
    DataSourceCreator = tomcat

    validationQuery = SELECT 1
    initialSize = 2
    removeAbandoned = true
    removeAbandonedTimeout = 120

    driverClassName = com.mysql.jdbc.Driver
    url = jdbc:mysql://db-stg.bar.someRegion.rds.amazonaws.com/someDBname
    username = your-username
    password = your-pw
</Resource>
</resources>

Ein wichtiger Unterschied besteht in der Verwendung von DataSourceCreator = tomcat . Dadurch wird sichergestellt, dass TomEE einen Pool erstellt, der sich um die Verbindungsvalidierung kümmert ("SELECT 1") und blockierte/veraltete Verbindungen entfernt, wodurch Ressourcen im Hintergrund freigegeben werden.

Im Gegensatz dazu ist der DataSourceCreator = dbpc (was Standard ist wenn nicht gesetzt:"Standardmäßig bereitgestellte Pools sind DBCP... ") hat sich so verhalten, wie Sie es beschrieben/erlebt haben (Zeitüberschreitungen, ...). Überprüfen Sie die zugehörige Dokumentation für weitere Unterschiede.

Beachten Sie auch, dass = wird in meiner Arbeitskonfiguration verwendet. Ich entdeckte, dass es in früheren TomEE-Versionen ohne = zu funktionieren schien . Ich würde jedoch empfehlen, mit = zu konfigurieren konsistent, wenn Ihr Zielanwendungsserver TomEE 1.7.2 oder höher ist.

Weitere Details hierzu finden Sie auch in der DataSource Configuration Seite.

Hoffe es hilft.