Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment éviter les connexions DB bloquées avec le pool de connexions JDBC de TomEE ?

J'utilise avec succès un resources.xml dans mon WEB-INF dossier similaire à celui-ci dans l'un de mes projets de production :

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

Une différence importante est d'utiliser DataSourceCreator = tomcat . Cela garantit que TomEE crée un pool qui s'occupe de la validation de la connexion ("SELECT 1") et supprime les connexions bloquées/obsolètes, libérant ainsi des ressources en arrière-plan.

En revanche, le DataSourceCreator = dbpc (qui est par défaut lorsqu'il n'est pas défini :"Les pools fournis par défaut sont DBCP... ") s'est comporté comme vous l'avez décrit/expérimenté (timeouts, ...). Vérifiez le documentation associée pour d'autres différences.

Notez également que = est utilisé dans ma configuration de travail. J'ai découvert que dans les versions précédentes de TomEE, cela semblait fonctionner sans = . Cependant, je recommanderais de configurer avec = de manière cohérente lorsque votre serveur d'application cible est TomEE 1.7.2 ou supérieur.

De plus amples détails à ce sujet peuvent également être trouvés dans la Configuration de la source de données page.

J'espère que ça aide.