Ultimate JDBC Connection Pool
npx @tessl/cli install tessl/maven-com-zaxxer--hikari-cp-java7@2.4.0HikariCP is a high-performance JDBC connection pool library designed for production environments. It provides a lightweight (approximately 90KB), zero-overhead connection pool that focuses on speed, simplicity, and reliability. HikariCP offers comprehensive connection management with features including connection timeout handling, pool size configuration, connection validation, metrics integration with Dropwizard and Prometheus, leak detection, and JMX monitoring capabilities.
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP-java7</artifactId>
<version>2.4.13</version>
</dependency>import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;For JMX management:
import com.zaxxer.hikari.HikariConfigMXBean;
import com.zaxxer.hikari.HikariPoolMXBean;For metrics integration:
import com.zaxxer.hikari.metrics.MetricsTracker;
import com.zaxxer.hikari.metrics.MetricsTrackerFactory;
import com.zaxxer.hikari.metrics.PoolStats;For framework integration:
import com.zaxxer.hikari.hibernate.HikariConnectionProvider;
import com.zaxxer.hikari.HikariJNDIFactory;Standard Java imports needed:
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.io.PrintWriter;
import java.io.Closeable;
import java.util.Properties;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory;
import javax.sql.DataSource;import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.SQLException;
// Configuration-based setup (recommended)
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:postgresql://localhost:5432/mydb");
config.setUsername("user");
config.setPassword("password");
config.setMaximumPoolSize(20);
config.setMinimumIdle(5);
config.setConnectionTestQuery("SELECT 1");
HikariDataSource dataSource = new HikariDataSource(config);
// Get connections from the pool
try (Connection connection = dataSource.getConnection()) {
// Use the connection for database operations
// Connection is automatically returned to pool when closed
}
// Clean shutdown
dataSource.close();HikariCP is built around several key components:
Core connection pooling functionality providing high-performance JDBC connection management with configurable pool sizing and connection lifecycle management.
public class HikariDataSource extends HikariConfig implements DataSource, Closeable {
// Constructors
public HikariDataSource();
public HikariDataSource(HikariConfig configuration);
// DataSource methods
public Connection getConnection() throws SQLException;
public Connection getConnection(String username, String password) throws SQLException;
public PrintWriter getLogWriter() throws SQLException;
public void setLogWriter(PrintWriter out) throws SQLException;
public void setLoginTimeout(int seconds) throws SQLException;
public int getLoginTimeout() throws SQLException;
public java.util.logging.Logger getParentLogger() throws SQLFeatureNotSupportedException;
public <T> T unwrap(Class<T> iface) throws SQLException;
public boolean isWrapperFor(Class<?> iface) throws SQLException;
// Pool management and lifecycle
public void close();
public boolean isClosed();
public void evictConnection(Connection connection);
@Deprecated
public void suspendPool();
@Deprecated
public void resumePool();
@Deprecated
public void shutdown();
// JMX and monitoring
public HikariPoolMXBean getHikariPoolMXBean();
public HikariConfigMXBean getHikariConfigMXBean();
// Metrics configuration
public void setMetricRegistry(Object metricRegistry);
public void setMetricsTrackerFactory(MetricsTrackerFactory metricsTrackerFactory);
public void setHealthCheckRegistry(Object healthCheckRegistry);
}Comprehensive configuration system with over 30 configuration properties for fine-tuning pool behavior, connection settings, and performance optimization.
public class HikariConfig implements HikariConfigMXBean {
// Constructors
public HikariConfig();
public HikariConfig(Properties properties);
public HikariConfig(String propertyFileName);
// Essential configuration setters
public void setJdbcUrl(String jdbcUrl);
public void setDataSourceClassName(String className);
public void setUsername(String username);
public void setPassword(String password);
public void setDataSource(DataSource dataSource);
public void setDataSourceJNDI(String jndiDataSource);
public void setDriverClassName(String driverClassName);
// Essential configuration getters
public String getJdbcUrl();
public String getDataSourceClassName();
public String getUsername();
public String getPassword();
public DataSource getDataSource();
public String getDataSourceJNDI();
public String getDriverClassName();
// Pool sizing
public void setMaximumPoolSize(int maxPoolSize);
public void setMinimumIdle(int minIdle);
public int getMaximumPoolSize();
public int getMinimumIdle();
// Timeouts
public void setConnectionTimeout(long connectionTimeoutMs);
public void setValidationTimeout(long validationTimeoutMs);
public void setIdleTimeout(long idleTimeoutMs);
public void setMaxLifetime(long maxLifetimeMs);
public void setLeakDetectionThreshold(long leakDetectionThresholdMs);
public void setInitializationFailTimeout(long initializationFailTimeout);
public long getConnectionTimeout();
public long getValidationTimeout();
public long getIdleTimeout();
public long getMaxLifetime();
public long getLeakDetectionThreshold();
public long getInitializationFailTimeout();
// Connection settings
public void setAutoCommit(boolean isAutoCommit);
public void setReadOnly(boolean readOnly);
public void setCatalog(String catalog);
public void setTransactionIsolation(String isolationLevel);
public void setConnectionTestQuery(String connectionTestQuery);
public void setConnectionInitSql(String connectionInitSql);
public boolean isAutoCommit();
public boolean isReadOnly();
public String getCatalog();
public String getTransactionIsolation();
public String getConnectionTestQuery();
public String getConnectionInitSql();
// Pool management
public void setAllowPoolSuspension(boolean isAllowPoolSuspension);
public void setIsolateInternalQueries(boolean isolate);
public void setRegisterMbeans(boolean register);
public void setPoolName(String poolName);
public boolean isAllowPoolSuspension();
public boolean isIsolateInternalQueries();
public boolean isRegisterMbeans();
public String getPoolName();
// Threading and scheduling
public void setThreadFactory(ThreadFactory threadFactory);
public void setScheduledExecutor(ScheduledExecutorService executor);
public ThreadFactory getThreadFactory();
public ScheduledExecutorService getScheduledExecutor();
// Metrics and monitoring
public void setMetricsTrackerFactory(MetricsTrackerFactory metricsTrackerFactory);
public void setMetricRegistry(Object metricRegistry);
public void setHealthCheckRegistry(Object healthCheckRegistry);
public void setHealthCheckProperties(Properties healthCheckProperties);
public MetricsTrackerFactory getMetricsTrackerFactory();
public Object getMetricRegistry();
public Object getHealthCheckRegistry();
public Properties getHealthCheckProperties();
// DataSource properties
public void setDataSourceProperties(Properties dsProperties);
public void addDataSourceProperty(String propertyName, Object value);
public void addHealthCheckProperty(String key, String value);
public Properties getDataSourceProperties();
// Validation and utility
public void validate();
public void copyState(HikariConfig other);
}Runtime monitoring and management capabilities through JMX beans, providing pool statistics and runtime configuration changes.
public interface HikariPoolMXBean {
// Pool statistics
int getIdleConnections();
int getActiveConnections();
int getTotalConnections();
int getThreadsAwaitingConnection();
// Pool control
void suspendPool();
void resumePool();
void softEvictConnections();
}
public interface HikariConfigMXBean {
// Runtime configuration setters
void setConnectionTimeout(long connectionTimeoutMs);
void setValidationTimeout(long validationTimeoutMs);
void setIdleTimeout(long idleTimeoutMs);
void setMaximumPoolSize(int maxPoolSize);
void setMinimumIdle(int minIdle);
void setLeakDetectionThreshold(long leakDetectionThresholdMs);
void setMaxLifetime(long maxLifetimeMs);
void setPassword(String password);
void setUsername(String username);
// Runtime configuration getters
long getConnectionTimeout();
long getValidationTimeout();
long getIdleTimeout();
long getLeakDetectionThreshold();
long getMaxLifetime();
int getMinimumIdle();
int getMaximumPoolSize();
String getPoolName();
}Pluggable metrics system supporting popular metrics frameworks including Dropwizard Metrics and Prometheus for comprehensive pool monitoring.
public class MetricsTracker implements AutoCloseable {
// Constructor
public MetricsTracker();
// Metrics recording methods
public void recordConnectionAcquiredNanos(long elapsedAcquiredNanos);
public void recordConnectionUsageMillis(long elapsedBorrowedMillis);
public void recordConnectionTimeout();
// AutoCloseable implementation
public void close();
}
public interface MetricsTrackerFactory {
MetricsTracker create(String poolName, PoolStats poolStats);
}
// Configuration methods in HikariConfig/HikariDataSource
public void setMetricsTrackerFactory(MetricsTrackerFactory metricsTrackerFactory);
public void setMetricRegistry(Object metricRegistry);
public void setHealthCheckRegistry(Object healthCheckRegistry);
public MetricsTrackerFactory getMetricsTrackerFactory();
public Object getMetricRegistry();
public Object getHealthCheckRegistry();Native integration with popular Java frameworks including Hibernate ORM and JNDI environments for seamless adoption in enterprise applications.
// Hibernate Integration
public class HikariConnectionProvider implements ConnectionProvider, Configurable, Stoppable {
// Constructor
public HikariConnectionProvider();
// ConnectionProvider methods
public Connection getConnection() throws SQLException;
public void closeConnection(Connection conn) throws SQLException;
public boolean supportsAggressiveRelease();
public boolean isUnwrappableAs(Class unwrapType);
public <T> T unwrap(Class<T> unwrapType);
// Configurable implementation
public void configure(Map props) throws HibernateException;
// Stoppable implementation
public void stop();
}
// JNDI Integration
public class HikariJNDIFactory implements ObjectFactory {
public synchronized Object getObjectInstance(Object obj, Name name, Context nameCtx,
Hashtable<?, ?> environment) throws Exception;
}// Core configuration properties interface
public interface HikariConfigMXBean {
long getConnectionTimeout();
long getValidationTimeout();
long getIdleTimeout();
long getLeakDetectionThreshold();
long getMaxLifetime();
int getMinimumIdle();
int getMaximumPoolSize();
String getPoolName();
}
// Pool statistics and control interface
public interface HikariPoolMXBean {
int getIdleConnections();
int getActiveConnections();
int getTotalConnections();
int getThreadsAwaitingConnection();
void softEvictConnections();
void suspendPool();
void resumePool();
}
// Base class for metrics tracking
public abstract class PoolStats {
protected PoolStats(long timeoutMs);
public int getTotalConnections();
public int getIdleConnections();
public int getActiveConnections();
public int getPendingThreads();
// Abstract method to be implemented by subclasses
protected abstract void update();
}