Connexions & bases de données

Talend Tips : Pool de connexions

1 janvier 2023

Les connexions aux bases de données sont essentielles pour les services web, mais les ouvrir et les fermer fréquemment peut entraîner des problèmes de performance et augmenter le temps de développement. Une solution bien connue pour atténuer ces défis est le pooling de connexions, qui permet à plusieurs services de partager un ensemble de connexions préétablies. Dans cet article, nous vous guiderons à travers la configuration du pooling de connexions pour une base de données MySQL en utilisant Talend Runtime.

Pourquoi utiliser le pooling de connexions ?

Créer de nouvelles connexions à la base de données chaque fois qu’un service en a besoin peut être coûteux en ressources et en temps. Cela peut dégrader les performances du système et provoquer des blocages, en particulier dans des environnements à fort trafic où de multiples connexions sont ouvertes et fermées constamment. D’autre part, utiliser une seule connexion partagée peut entraîner des problèmes de délai d’attente lorsque de nombreuses requêtes accèdent simultanément à la base de données. Le pooling de connexions résout ces problèmes en maintenant un pool de connexions ouvertes réutilisables par différents services.

Configurer le pooling de connexions dans Talend Runtime

1. Installer les bibliothèques de pooling de connexions

Avant de configurer le pooling de connexions, assurez-vous que les bibliothèques nécessaires sont installées dans votre environnement Talend Runtime. La bibliothèque commons-dbcp est essentielle pour gérer les pools de connexions.

/opt/talend/X.X.X/esb/container/bin/client install -s mvn:commons-dbcp/commons-dbcp/1.4

2. Installer le pilote JDBC MySQL

Il existe trois méthodes pour installer le pilote JDBC sur votre serveur Karaf Talend :

  • Installation via copie dans le dossier de déploiement : copiez le pilote JDBC directement dans le dossier de déploiement du conteneur Talend.
cd /opt/talend/X.X.X/esb/container/deploy/
cp $TEMP/mysql-connector-java-X.X.X-bin.jar .

Dans ce cas, le pilote doit rester dans le dossier de déploiement.

  • Installation depuis un dépôt Maven public : si le pilote MySQL est disponible dans un dépôt Maven public, vous pouvez l’installer directement avec une commande bundle:install.
/opt/talend/X.X.X/esb/container/bin/client bundle:install -s mvn:mysql/mysql-connector-java/X.X.X
  • Installation à partir d’un fichier local : vous pouvez également installer le pilote JDBC à partir d’un fichier local.
/opt/talend/X.X.X/esb/container/bin/client install -s wrap:file:$TEMP/mysql-connector-java-X.X.X-bin.jar

Ensuite, vérifiez que le bundle est bien installé et actif :

/opt/talend/X.X.X/esb/container/bin/client bundle:list | grep MySQL

Assurez-vous que le pilote est marqué comme « Actif », ce qui indique qu’il est prêt à être utilisé par une source de données.

3. Configurer la source de données et le pool de connexions

La façon la plus simple de configurer un pool de connexions est d’utiliser un conteneur Blueprint. Créez un fichier XML nommé datasource-mysql.xml dans le dossier deploy du Runtime et configurez-le comme suit :

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
    <bean id="mysqlDataSource" class="com.mysql.cj.jdbc.MysqlConnectionPoolDataSource">
        <property name="url" value="jdbc:mysql://localhost:3306/root"/>
        <property name="user" value="root"/>
        <property name="password" value=""/>
    </bean>
    <bean id="dataSource" class="org.apache.commons.dbcp.datasources.SharedPoolDataSource" destroy-method="close">
        <property name="connectionPoolDataSource" ref="mysqlDataSource"/>
        <property name="maxActive" value="20"/>
        <property name="maxIdle" value="5"/>
        <property name="maxWait" value="-1"/>
    </bean>
    <service ref="dataSource" interface="javax.sql.DataSource">
        <service-properties>
            <entry key="osgi.jndi.service.name" value="jdbc/sample"/>
        </service-properties>
    </service>
</blueprint>

Ce fichier définit une source de données nommée ds-mysql-1. Le bean mysqlDataSource crée le pool de connexions et configure ses propriétés. Le service OSGi enregistre le pool de connexions pour qu’il soit utilisé par les services et routes Talend.

Pour créer des pools de connexions pour d’autres bases de données, il suffit de copier les sections du bean et du service OSGi pour chaque base de données, en modifiant les identifiants et les références.

Vérification et utilisation du pool de connexions

Une fois la source de données configurée, vérifiez qu’elle est bien déployée et active :

/opt/talend/X.X.X/esb/container/bin/client list | grep xml

Assurez-vous que la source de données est active et que le nom JNDI est correctement configuré.

Considérations importantes

  • Utilisation en production : le pooling de connexions ne fonctionne que dans le Runtime de Talend. Pour tester dans Studio, configurez les connexions de manière classique.
  • Libération des connexions : même en utilisant un pool, il est nécessaire de fermer les connexions après utilisation pour les libérer dans le pool.
  • Sécurité : lors de l’utilisation de Blueprint pour la configuration, il est recommandé de stocker les mots de passe de base de données de manière sécurisée, par exemple en les chiffrant.

Conclusion

Le pooling de connexions est une pratique essentielle pour améliorer les performances des applications utilisant des bases de données avec Talend. En suivant ces étapes, vous pouvez configurer efficacement des pools de connexions pour MySQL et d’autres bases de données, réduisant ainsi les coûts en ressources et en temps de développement.

Drivers JDBC - installation par base

H2

bundle:install -s mvn:com.h2database/h2/1.4.196

Vérification :

297 │ Active │ 80 │ 1.4.196 │ H2 Database Engine

Derby

bundle:install -s mvn:org.apache.derby/derby/10.14.1.0

Vérification :

298 │ Active │ 80 │ 10.14.1000000.1808820 │ Apache Derby 10.14

MySQL

bundle:install -s mvn:mysql/mysql-connector-java/5.1.45

Vérification :

296 │ Active │ 80 │ 5.1.45 │ Oracle Corporation's JDBC Driver for MySQL

DB2

Téléchargement :

https://artifacts.alfresco.com/nexus/content/repositories/public/com/ibm/db2/jcc/db2jcc4/10.1/db2jcc4-10.1.jar

Installation :

bundle:install -s wrap:file:$TEMP/db2jcc4-10.1.jar

Vérification :

305 │ Active │ 80 │ 0 │ wrap_file__tmp_db2jcc4-10.1.jar

PostgreSQL

bundle:install -s mvn:org.postgresql/postgresql/9.4.1212

Vérification :

299 │ Active │ 80 │ 9.4.1212 │ PostgreSQL JDBC Driver JDBC42

Oracle

Le driver Oracle n’est pas référencé sur un dépôt Maven public. Il doit être téléchargé directement depuis le site Oracle :

http://download.oracle.com/otn/utilities_drivers/jdbc/122010/ojdbc8.jar

Installation :

bundle:install -s wrap:file:$TEMP/ojdbc8.jar

Vérification :

300 │ Active │ 80 │ 0 │ wrap_file__tmp_ojdbc8.jar

Microsoft SQL Server - driver JTDS

bundle:install -s wrap:mvn:net.sourceforge.jtds/jtds/1.3.1

Vérification :

302 │ Active │ 80 │ 0 │ wrap_mvn_net.sourceforge.jtds_jtds_1.3.1

Microsoft SQL Server - driver officiel

bundle:install -s wrap:mvn:com.microsoft.sqlserver/mssql-jdbc/6.2.2.jre8

Vérification :

296 │ Active │ 80 │ 6.2.2.jre8 │ Microsoft JDBC Driver for SQL Server

← Toutes les astuces Talend