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

Come evitare connessioni DB bloccate con il pool di connessioni JDBC di TomEE?

Sto usando con successo un resources.xml nel mio WEB-INF cartella simile a questa in uno dei miei progetti di produzione:

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

Una differenza importante consiste nell'usare DataSourceCreator = tomcat . Ciò garantisce che TomEE crei un pool che si occupa della convalida della connessione ("SELECT 1") e rimuove le connessioni bloccate/obsolete, liberando così risorse in background.

Al contrario, il DataSourceCreator = dbpc (che è predefinito quando non è impostato:"I pool forniti di default sono DBCP... ") si è comportato come l'hai descritto/visto (timeout,...). Controlla il documentazione correlata per ulteriori differenze.

Nota anche che = viene utilizzato nella mia configurazione di lavoro. Ho scoperto che nelle precedenti versioni di TomEE sembrava funzionare senza = . Tuttavia, consiglierei di configurare con = in modo coerente quando il server delle applicazioni di destinazione è TomEE 1.7.2 o versioni successive.

Ulteriori dettagli su questo possono essere trovati anche nella Configurazione DataSource pagina.

Spero che aiuti.