Meilleure configuration de c3p0 [fermé]

je suis aux prises avec un problème de configuration c3p0. J'ai posté une question la semaine dernière- c3p0 Configurations! Où et comment? , mais aucune réponse reçue. Toute aide est appréciée.

33
demandé sur Community 2012-09-20 10:20:05

2 réponses

c'est une configuration que j'utilise qui maintient les ressources au minimum. Bien sûr, vous voudrez adapter votre application pour utiliser les ressources dont elle a besoin...

référence : http://www.mchange.com/projects/c3p0/index.html

  • testConnectionOnCheckin valide la connexion lorsqu'elle est retournée au pool. testConnectionOnCheckOut , mais assurerait des connexions actives avant l'utilisation, serait trop coûteux de le faire.
  • idleConnectionTestPeriod fixe une limite à la durée d'inactivité d'une connexion avant de la tester. Sans preferredTestQuery, la valeur par défaut est DatabaseMetaData.getTables() - qui est agnostique base de données, et bien qu'un appel relativement cher, est probablement très bien pour une base de données relativement petite. Si vous êtes paranoïaque au sujet de la performance utilisez une requête spécifique à votre base de données (i.e. preferredTestQuery="SELECT 1" )
  • maxIdleTimeExcessConnections ramènera le connectionCount retour vers minPoolSize après un pic d'activité.

en dessous de la configuration définit poolsize entre 3-20. Les connexions inactives sont testées de nouveau toutes les 5 minutes pour les maintenir actives. En raison de idleConnectionTestPeriod , cela ne maintiendra que le nombre minimum de connexions en vie. S'il y a plus de 3 connexions à 4 minutes, cela tue les connexions libérant des ressources au minimum.

utilisation de maxIdleTimeExcessConnections et idleConnectionTestPeriod nie la nécessité de maxIdleTime

<Context docBase="myapp" path="/myapp" reloadable="true">
    <Resource description="My DB Datasource" name="jdbc/mydb"
        auth="Container" factory="org.apache.naming.factory.BeanFactory"
        type="com.mchange.v2.c3p0.ComboPooledDataSource" 
        user="myuser" password="******"
        minPoolSize="3"
        maxPoolSize="20"
        acquireIncrement="1" 
        driverClass="com.mysql.jdbc.Driver" 
        jdbcUrl="jdbc:mysql://localhost:3306/mydb"
        testConnectionOnCheckin="true" 
        idleConnectionTestPeriod="300"
        maxIdleTimeExcessConnections="240"
    />
</Context>
45
répondu Domenic D. 2012-09-21 13:30:43

la meilleure configuration est de configurer JPA pour utiliser l'environnement container pour obtenir DataSource.

cela permet au conteneur de fournir le pool de connexion plutôt que de le configurer directement dans votre projet JPA.

vous n'indiquez pas avec quel conteneur vous travaillez. J'utilise presque toujours c3p0 avec des applications autonomes, telles que des applications Java SE desktop ou server. Je l'utilise aussi avec Spring framework.

Lorsqu'on utilise un conteneur tel que Servlet (Tomcat/Jetty) ou Application Server (tel que Glashfish ou JBoss AS), ceux-ci fournissent déjà une implémentation de pooler de connexion de source de données qui n'est généralement pas c3p0 mais fournit une fonction équivalente.

Je n'ai jamais essayé de configurer un pooler de connexion à l'intérieur d'un projet JPA parce que cela signifie éditer la configuration pour la personnaliser pour chaque environnement qu'elle doit exécuter. C'est un des maux de tête, de sorte qu'il valait mieux qu' JPA part soit donné la source de données à utiliser lors du bootstrap.

2
répondu Darryl Miles 2012-09-22 12:25:32