miércoles, 22 de agosto de 2012

Configuración de un Pool de conexines con BoneCP

Actualmente le doy mantenimiento a un proyecto que se conecta a una BD MySQL, la carga al inicio no era muy grande y por simplicidad use la configuracion por defecto que me ofrece Spring para el DataSource:

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    p:driverClassName="${dataSource.driver}"
    p:url="${dataSource.url}"
    p:username="${dataSource.username}"
    p:password="${dataSource.password}" />

La aplicación fue crecienco en cuanto a usuarios y transacciones, esto le pego al rendimiento y detecte que el problema se debia al pobre o nula administración de las conexiones a la BD, por tal motivo me di a la tarea de investigar como solventar esto y me encontre con BoneCP el cual se define asi mismo como una libreria para administrar el pool de conexiones de facil y libre uso.

Para descargar mediante Maven, colocar en el pom las siguientes dependencias:

<dependency>
        <groupId>com.jolbox</groupId>
    <artifactId>bonecp</artifactId>
    <version>0.7.1.RELEASE</version>
</dependency>

<dependency>
    <groupId>com.jolbox</groupId>
    <artifactId>bonecp-spring</artifactId>
    <version>0.7.1.RELEASE</version>
</dependency>

Finalmente mi DataSource quedo de la siguiente manera:

<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
        <property name="driverClass" value="${dataSource.driver}" />
        <property name="jdbcUrl" value="${dataSource.url}" />
        <property name="username" value="${dataSource.username}"/>
        <property name="password" value="${dataSource.password}"/>
        <property name="idleConnectionTestPeriod" value="60"/>
        <property name="idleMaxAge" value="240"/>
        <property name="maxConnectionsPerPartition" value="30"/>
        <property name="minConnectionsPerPartition" value="10"/>
        <property name="partitionCount" value="3"/>
        <property name="acquireIncrement" value="5"/>
        <property name="statementsCacheSize" value="100"/>
        <property name="releaseHelperThreads" value="3"/>
    </bean>

Probado y puesto en producción exitosamente. Saludos!!!

jueves, 2 de agosto de 2012

Invocación de métodos mediante scheduled con Spring

Buenas madrugadas, esta entrada nace por una pregunta que me hizo un amigo ¿Se puede mandar a ejecutar codigo java desde una aplicacion WEB sin necesidad de una interfaz grafica?, una tipica aplicación WEB espera una acción por parte del usuario para ir al servidor a ejecutar algo, pero podemos en nuestro contexto de la aplicación programar que se ejecute un metodo de alguna clase cualquiera de manera automatica, lo podriamos hacer configurando un listener en el web.xml o en este caso configurando una tarea programada en el contexto de Spring.

Para muestra basta un boton una aplicación de ejemplo, la aplicación se genero con NetBeans 7.2 y se creo usando Maven, el pom.xml ya tiene las dependencias necesarias.

Para descargar la aplicación de ejemplo clic aqui


Referencias