Aprende a crear un connection pool utilizando Hikari CP en Español


connectionPool

Hikari CP es un Framework que permite crear pools de conexiones desarrollado en 2012, su particularidad es que si comparamos su performance con sus competidores c3p0, dbcp2, tomcat y vibur veremos los siguientes resultados:

HikariCP-bench-2.6.0 (1)

Esto nos da una idea de porque debemos aprender a usarlo y su impacto en nuestras aplicaciones.

Paso 1 Crear base de datos

Antes de empezar a utilizar hikaricp crearemos una pequeña base de datos de prueba, en este ejemplo utilizaremos Mysql

Paso 2 Configuración de hikaricp

El primer paso será configurarlo, para esto agregaremos las siguiente dependencias :

Captura de pantalla 2018-09-04 a las 10.38.40 a.m..png

Puedes copiar la dependencia de aquí.

Paso 3 Crear un datasource

Para crear un datasource debemos hacer lo siguiente:


import java.sql.Connection;
import java.sql.SQLException;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

/**
 * @author maagapi
 *
 */
public class Devs4jDatasource {

	private static final HikariConfig config;
	private static final HikariDataSource ds;

	static {
		config = new HikariConfig();
		config.setJdbcUrl("jdbc:mysql://localhost:3306/information_schema");
		config.setUsername("root");
		config.setPassword("root");
		config.addDataSourceProperty("cachePrepStmts", "true");
		config.addDataSourceProperty("prepStmtCacheSize", "250");
		config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
		ds = new HikariDataSource(config);
	}

	private Devs4jDatasource() {
	}

	public static final Connection getConnection() throws SQLException {
		return ds.getConnection();
	}
}

Analicemos los siguientes puntos:

  • Solo crearemos una instancia del tipo HikariDataSource ya que esta nos ayudará a generar muchas conexiones.
  • Inicializamos nuestras configuraciones en un bloque estático ya que necesitaremos un objeto de tipo HikariConfig para crear nuestro HikariDataSource.
  • El método ds.getConnection() devolverá una conexión a nuestra base de datos.
  • En nuestro ejemplo nos conectaremos a la base de datos information_schema que ya viene por default con nuestra instalación de MySQL.

Es necesario que entendamos que podemos definir las siguientes configuraciones en nuestro HikariConfig:

  • autoCommit
  • connectionTimeout
  • idleTimeout
  • maxLifetime
  • connectionTestQuery
  • connectionInitSql
  • validationTimeout
  • maximumPoolSize
  • poolName
  • allowPoolSuspension
  • readOnly
  • transactionIsolation
  • leakDetectionThreshold

Es posible crear un objeto de tipo HikariConfig leyendo las properties de un archivo externo como se muestra a continuación:

private static HikariConfig config = new HikariConfig(
    "datasource.properties" );

El archivo datasource.properties contendrá todas las propiedades necesarias para inicializar nuestro pool.

Paso 4: Utilizando nuestro Datasource

El siguiente paso será utilizar nuestro DataSource, veamos el siguiente código:


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @author raidentrance
 *
 */
public class Devs4jApplication {
	public static void main(String[] args) throws SQLException {
		Connection connection = Devs4jDatasource.getConnection();

		PreparedStatement statement = connection.prepareStatement("SELECT TABLE_NAME FROM TABLES");
		ResultSet resultSet = statement.executeQuery();
		while(resultSet.next()){
			System.out.println(resultSet.getString("TABLE_NAME"));
		}
	}
}

En el código anterior podemos ver como obtener una conexión del pool de conexiones y utilizarla para obtener el nombre de las tablas que tenemos e imprimirlas.

Puedes encontrar el código completo en el siguiente repositorio https://github.com/raidentrance/hikaricp-example.

Síguenos en nuestras redes sociales para enterarte sobre nuevo contenido https://www.facebook.com/devs4j/ y https://twitter.com/devs4j.

Autor: Alejandro Agapito Bautista

Twitter: @raidentrance

Contacto:raidentrance@gmail.com

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s