High-performance JDBC connection pool library for Java applications
npx @tessl/cli install tessl/maven-com-zaxxer--hikari-cp@6.3.0HikariCP is a high-performance, zero-overhead production-ready JDBC connection pool for Java applications. At roughly 165KB, this library provides a fast, simple, and reliable connection pooling solution that emphasizes simplicity as a prerequisite for reliability.
pom.xml:<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>6.3.0</version>
</dependency>Gradle:
implementation 'com.zaxxer:HikariCP:6.3.0'import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;For metrics integration:
import com.zaxxer.hikari.metrics.MetricsTrackerFactory;
import com.zaxxer.hikari.metrics.micrometer.MicrometerMetricsTrackerFactory;For Hibernate integration:
import com.zaxxer.hikari.hibernate.HikariConnectionProvider;import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.SQLException;
// Method 1: Using HikariConfig
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
config.setUsername("myuser");
config.setPassword("mypassword");
config.setMaximumPoolSize(20);
HikariDataSource dataSource = new HikariDataSource(config);
// Method 2: Using property file
HikariConfig config = new HikariConfig("/path/to/hikari.properties");
HikariDataSource dataSource = new HikariDataSource(config);
// Method 3: Default constructor with programmatic configuration
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("myuser");
dataSource.setPassword("mypassword");
// Getting connections
try (Connection connection = dataSource.getConnection()) {
// Use the connection for database operations
// Connection is automatically returned to pool when closed
}
// Shutdown the pool when application terminates
dataSource.close();HikariCP is built around several key components:
Primary connection pool functionality for creating and managing database connections efficiently.
public class HikariDataSource extends HikariConfig implements DataSource, Closeable {
public HikariDataSource();
public HikariDataSource(HikariConfig configuration);
public Connection getConnection() throws SQLException;
public void close();
public boolean isClosed();
public boolean isRunning();
}Comprehensive configuration system with validation, property loading, and runtime management capabilities.
public class HikariConfig implements HikariConfigMXBean {
public HikariConfig();
public HikariConfig(Properties properties);
public HikariConfig(String propertyFileName);
// Core connection settings
public void setJdbcUrl(String jdbcUrl);
public void setUsername(String username);
public void setPassword(String password);
public void setMaximumPoolSize(int maxPoolSize);
public void setMinimumIdle(int minIdle);
// Timeout configurations
public void setConnectionTimeout(long connectionTimeoutMs);
public void setIdleTimeout(long idleTimeoutMs);
public void setMaxLifetime(long maxLifetimeMs);
public void validate();
}Runtime monitoring and management through JMX MBeans for operational visibility and control.
public interface HikariPoolMXBean {
int getIdleConnections();
int getActiveConnections();
int getTotalConnections();
int getThreadsAwaitingConnection();
void softEvictConnections();
void suspendPool();
void resumePool();
}
public interface HikariConfigMXBean {
long getConnectionTimeout();
void setConnectionTimeout(long connectionTimeoutMs);
int getMaximumPoolSize();
void setMaximumPoolSize(int maxPoolSize);
// ... other runtime configuration methods
}Pluggable metrics system supporting Micrometer, Dropwizard/Codahale, and Prometheus monitoring frameworks.
public interface MetricsTrackerFactory {
IMetricsTracker create(String poolName, PoolStats poolStats);
}
public interface IMetricsTracker extends AutoCloseable {
default void recordConnectionCreatedMillis(long connectionCreatedMillis) {}
default void recordConnectionAcquiredNanos(long elapsedAcquiredNanos) {}
default void recordConnectionUsageMillis(long elapsedBorrowedMillis) {}
default void recordConnectionTimeout() {}
}
// Micrometer integration
public class MicrometerMetricsTrackerFactory implements MetricsTrackerFactory;
// Dropwizard integration
public class CodahaleMetricsTrackerFactory implements MetricsTrackerFactory;
public class Dropwizard5MetricsTrackerFactory implements MetricsTrackerFactory;
// Prometheus integration
public class PrometheusMetricsTrackerFactory implements MetricsTrackerFactory;
public class PrometheusHistogramMetricsTrackerFactory implements MetricsTrackerFactory;Seamless integration with Hibernate ORM for connection provider implementation.
public class HikariConnectionProvider
implements ConnectionProvider, Configurable, Stoppable, ServiceRegistryAwareService {
// Hibernate ConnectionProvider implementation
}
public class HikariConfigurationUtil {
// Utility methods for Hibernate configuration
}Supporting utility classes for credentials management, JNDI integration, and advanced connection handling.
public final class Credentials {
public static Credentials of(String username, String password);
public Credentials(String username, String password);
public String getUsername();
public String getPassword();
}
public class HikariJNDIFactory implements ObjectFactory {
public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment);
}
public interface SQLExceptionOverride {
enum Override { CONTINUE_EVICT, DO_NOT_EVICT, MUST_EVICT }
default Override adjudicate(SQLException sqlException);
}// Configuration credentials holder
public final class Credentials {
public static Credentials of(String username, String password);
public String getUsername();
public String getPassword();
}
// Pool statistics base class
public abstract class PoolStats {
public PoolStats(long timeoutMs);
public int getTotalConnections();
public int getIdleConnections();
public int getActiveConnections();
public int getPendingThreads();
public int getMaxConnections();
public int getMinConnections();
}
// SQL exception override control
public enum SQLExceptionOverride.Override {
CONTINUE_EVICT, // Continue with default eviction logic
DO_NOT_EVICT, // Do not evict the connection
MUST_EVICT // Force eviction regardless of exception
}