sql >> Database teknologi >  >> RDS >> Mysql

Hvordan undgår man fastlåste DB-forbindelser med TomEE's JDBC-forbindelsespulje?

Jeg bruger med succes en resources.xml i min WEB-INF mappe, der ligner denne i af mine produktionsprojekter:

<?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>

En vigtig forskel er at bruge DataSourceCreator = tomcat . Dette sikrer, at TomEE opretter en pulje, som sørger for forbindelsesvalidering ("SELECT 1") og fjerner fastlåste/forældede forbindelser, hvilket frigør ressourcer i baggrunden.

Derimod er DataSourceCreator = dbpc (som er standard når det ikke er angivet:"Standardangivne puljer er DBCP... ") opførte sig, som du beskrev/oplevede det (timeouts,...). Tjek relateret dokumentation for yderligere forskelle.

Bemærk også, at = bruges i min arbejdskonfiguration. Jeg opdagede, at i tidligere TomEE-udgivelser så det ud til at fungere uden = . Jeg vil dog anbefale at konfigurere med = konsekvent, når din målapplikationsserver er TomEE 1.7.2 eller nyere.

Yderligere detaljer om dette kan også findes i DataSource Configuration side.

Håber det hjælper.




  1. Alternativt outputformat til psql

  2. JDBC MySql-forbindelsespooling praktiserer for at undgå opbrugt forbindelsespulje

  3. Rollback en forpligtet transaktion

  4. Din ultimative guide til SQL Joins:OUTER JOIN – Del 2