java - example - La mejor configuración de c3p0
spring boot postgresql schema (2)
Esta es una configuración que estoy usando que mantiene los recursos al mínimo. Por supuesto, querrá adaptar su aplicación para usar los recursos que necesita ...
Referencia : http://www.mchange.com/projects/c3p0/index.html
-
testConnectionOnCheckin
valida la conexión cuando se devuelve al grupo.testConnectionOnCheckOut
, aunque aseguraría conexiones activas antes del uso, sería demasiado costoso de hacer. -
idleConnectionTestPeriod
establece un límite de cuánto tiempo permanecerá inactiva una conexión antes de probarla. Sin preferredTestQuery, el valor predeterminado esDatabaseMetaData.getTables()
- que es independiente de la base de datos, y aunque es una llamada relativamente cara, probablemente sea adecuada para una base de datos relativamente pequeña. Si eres paranoico sobre el rendimiento, utiliza una consulta específica para tu base de datos (es decir,preferredTestQuery="SELECT 1"
) -
maxIdleTimeExcessConnections
devolverá el connectionCount de nuevo aminPoolSize
después de un aumento en la actividad.
A continuación, la configuración establece el tamaño de la agrupación entre 3-20. Las conexiones inactivas se vuelven a probar cada 5 minutos para mantenerlas activas. Debido a idleConnectionTestPeriod
, esto solo mantendrá viva la cantidad mínima de conexiones. Si hay más de 3 conexiones en la marca de 4 minutos, se eliminan esas conexiones liberando recursos al mínimo.
El uso de maxIdleTimeExcessConnections
y idleConnectionTestPeriod
niega la necesidad 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>
Estoy luchando con un problema que enfrenta la configuración de c3p0. Publiqué una pregunta la semana pasada: ¡Configuraciones de C3P0! ¿Dónde y cómo? , pero no recibió respuesta. Cualquier ayuda es apreciada.
La mejor configuración es configurar JPA para usar el entorno contenedor para obtener DataSource.
Esto permite que el contenedor proporcione la agrupación de conexiones en lugar de configurarlo directamente en su proyecto de JPA.
No indica con qué entorno contenedor está trabajando. Casi siempre uso c3p0 con aplicaciones autónomas, como aplicaciones de servidor o escritorio Java SE. También lo uso con Spring framework.
Cuando se utiliza un contenedor como Servlet (Tomcat / Jetty) o Application Server (como Glashfish o JBoss AS), estos ya proporcionan una implementación del colector de conexión de DataSource que normalmente no es c3p0 pero proporciona una función equivalente.
Nunca intenté configurar un pooler de conexión dentro de un proyecto JPA porque esto significa editar la configuración para personalizarla para cada entorno en el que necesita ejecutarse. Esto es un dolor de cabeza, así que es mejor que la parte JPA reciba el DataSource para usar durante el arranque.