2013-02-27 4 views
2

J'ai un tas de programmes Java exécutés toutes les quelques minutes. Ces programmes sont lancés par un script toutes les quelques minutes et se termine en moins d'une minute. La plupart d'entre eux sont un seul thread et d'accéder à MySQL DB J'utilise:Frais généraux liés à l'utilisation du pool de connexions DB

DriverManager.getConnection() 

Ils ont juste besoin de se connecter une fois et exécuter une requête. Maintenant, j'ajoute un nouveau programme à ce groupe qui est multi-threadé et tous les threads doivent accéder à DB en même temps. Je pense à utiliser un pool de connexion DB (c3p0) pour cela. Étant donné que tous ces programmes partagent un DAO commun pour l'accès à la base de données, est-ce que l'utilisation d'un pool de connexions DB pour les programmes à un seul thread nécessite une connexion? Je prévois de définir la taille initialPool à 1, la taille minimale du pool à 1 et la taille maximale du pool à 10.

Répondre

2

L'objectif principal des pools de connexion est d'avoir des connexions prêtes à l'emploi, plutôt que d'ouvrir et de fermer chaque fois que vous voulez obtenir une connexion. Cette approche économise assez de temps en termes si DB est utilisé assez souvent.

Apache DBCP est un thread unique, mais de toute façon il augmente considérablement les performances, si votre application utilise très souvent la connexion DB.

C3P0 est un bon choix, mais pour le choix pool de connexion appropriée s'il vous plaît vérifier cette discussion: Connection pooling options with JDBC: DBCP vs C3P0

+0

Ma question est de savoir s'il y a un problème de performance sur l'utilisation d'une connexion DB Piscine avec juste une connexion vs juste obtenir une connexion à l'aide DriverManager.getConnection() – kriver

+0

Il ne devrait pas y avoir de problèmes de performance au moins simplement parce que vous ne fermerez pas du tout la connexion. Puisque vous envisagez de définir 'maxPoolSize' à 10, dans ce cas, ConnectionPool est le meilleur choix car il n'y aura pas de verrous. La seule chose à considérer est que ConnectionPool a besoin de bibliothèques externes, alors que DriverManager.getConnection() n'a besoin que de JDK. – n1ckolas

Questions connexes