Meilleure configuration de c3p0 [fermé]
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 estDatabaseMetaData.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 versminPoolSize
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>
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.