Pool de Conexiones
Como ya sabéis Java Database Connectivity (JDBC) es una API que proporciona una interfaz común para acceder a bases de datos relacionales desde Java. JDBC utiliza un conjunto de clases e interfaces para conectarse a una base de datos, enviar consultas y recuperar resultados. Pero hasta ahora usabamos/ocupabámos una conexión del SGBD. Las conexiones de un SGBD son limitadas, por tanto hay formas de conectarse a la base de datos de manera más eficiente.
Pool de Conexiones
El uso de un pool de conexiones JDBC puede mejorar el rendimiento de una aplicación Java que requiere conectarse a una base de datos. En lugar de abrir y cerrar una conexión cada vez que se necesita acceder a la base de datos, el pool de conexiones permite reutilizar las conexiones existentes.
Lo primero que es necesario es agregar tres jars de Apache a tu proyecto (de la misma manera que el jar de MariaDB) para poder usar esta forma nueva de conectarse:
Para crear un pool básico de conexiones se crea un objeto de la clase BasicDataSource, a partir de ese objeto se obteniene las conexiones necesitadas. Y se le asigna todos los parámetros necesarios:
public class EjemploPoolConexionJDBC {
public static void main(String[] args) throws SQLException {
// Configurar el pool de conexiones
BasicDataSource dataSource = new BasicDataSource();
//dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/hola");
dataSource.setUsername("xxx");
dataSource.setPassword("xxxx");
dataSource.setInitialSize(5);
dataSource.setMaxTotal(10);
// Obtener una conexión del pool
Connection conn = dataSource.getConnection();
// Usar la conexión para enviar consultas
// ...
// Devolver la conexión al pool
conn.close();
}
}
Hay más opciones de pool con diferentes clases DataSource, y también podemos configurarlo con determinados sets del DataSource tal como véis en el ejemplo. Extra:
- setMaxActive() : Número máximo de conexiones que se pueden abrir simultáneamente.
- setMinIdle() : Número mínimo de conexiones inactivas que queremos que haya. Si el número de conexiones baja de este número, se abriran más.
- setMaxIdle() : Número máximo de conexiones inactivas que queremos que haya. Si hay más, se irán cerrando.
- setInitialSize() : Número de conexiones que se quiere que se abran en cuanto el pool comienza a trabajar (se llama por primera vez a getConnection(), setLogwriter(), setLoginTimeout(), getLoginTimeout() o getLogWriter(). Debe llamarse a setInitialSize() antes de llamar a cualquiera de estos métodos y después no puede cambiarse el valor.