La forma más sencilla de obtener una conexión JDBC es con DriverManager, pero en producción siempre debes usar un pool de conexiones. Crear y destruir conexiones para cada petición es lento y costoso; un pool las reutiliza.
Conexión directa con DriverManager (solo para scripts y tests)
import java.sql.*;
String url = "jdbc:mysql://localhost:3306/mi_base?useSSL=false&serverTimezone=UTC";
String user = "usuario";
String pass = "contraseña";
try (Connection con = DriverManager.getConnection(url, user, pass)) {
System.out.println("Conectado: " + con.getMetaData().getDatabaseProductVersion());
} catch (SQLException e) {
System.err.println("Error: " + e.getMessage());
}
HikariCP: el pool más rápido para Java
HikariCP es el pool de conexiones recomendado en 2026. Es el pool por defecto de Spring Boot y el más rápido según todos los benchmarks disponibles.
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import javax.sql.DataSource;
public class DatabaseConfig {
private static final HikariDataSource dataSource;
static {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mi_base?useSSL=true&serverTimezone=UTC&characterEncoding=UTF-8");
config.setUsername("usuario");
config.setPassword("contraseña");
// Pool settings
config.setMaximumPoolSize(20); // máximo de conexiones
config.setMinimumIdle(5); // conexiones mínimas en espera
config.setConnectionTimeout(30_000); // timeout al obtener conexión (30s)
config.setIdleTimeout(600_000); // tiempo máximo inactiva (10min)
config.setMaxLifetime(1_800_000); // vida máxima de una conexión (30min)
config.setPoolName("MiPool");
// Validar conexiones
config.setConnectionTestQuery("SELECT 1");
dataSource = new HikariDataSource(config);
}
public static DataSource getDataSource() { return dataSource; }
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
public static void close() { dataSource.close(); }
}
Uso del pool
// try-with-resources devuelve la conexión al pool al terminar
try (Connection con = DatabaseConfig.getConnection()) {
// usar la conexión
System.out.println("Pool size: " + DatabaseConfig.getDataSource()
.unwrap(HikariDataSource.class).getHikariPoolMXBean().getTotalConnections());
}
Cargar configuración desde fichero (buena práctica)
// hikari.properties
dataSource.url=jdbc:mysql://localhost:3306/mi_base
dataSource.user=usuario
dataSource.password=contraseña
maximumPoolSize=20
// En Java
HikariConfig config = new HikariConfig("/hikari.properties");
HikariDataSource ds = new HikariDataSource(config);
