HikariCP is a high-performance JDBC connection pool used in Java applications to manage database connections efficiently.
Instead of creating a new database connection every time the application queries the database, HikariCP maintains a pool of reusable connections.
It is currently the default connection pool used by Spring Boot.
+-------------------+
| Spring Boot App |
+---------+---------+
|
Request for DB
|
v
+-----------------+
| HikariCP Pool |
| |
| Conn1 Conn2 |
| Conn3 Conn4 |
| Conn5 Conn6 |
+--------+-------+
|
v
Database
Flow:
| Feature | Description |
|---|---|
| Very Fast | One of the fastest JDBC pools |
| Lightweight | Small memory footprint |
| Reliable | Production-grade pool |
| Auto Configuration | Built-in with Spring Boot |
| Low Latency | Optimized internal design |
Spring Boot uses HikariCP automatically when these dependencies are included.
spring-boot-starter-data-jpa spring-boot-starter-jdbc
spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5 spring.datasource.hikari.idle-timeout=30000 spring.datasource.hikari.max-lifetime=1800000 spring.datasource.hikari.connection-timeout=30000
| Property | Description | Default |
|---|---|---|
| maximumPoolSize | Maximum connections in pool | 10 |
| minimumIdle | Minimum idle connections | same as max |
| idleTimeout | Idle connection removal time | 600000 ms |
| maxLifetime | Maximum connection lifetime | 1800000 ms |
| connectionTimeout | Wait time for connection | 30000 ms |
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import javax.sql.DataSource;
public class DataSourceConfig {
public DataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
config.setUsername("root");
config.setPassword("root");
config.setMaximumPoolSize(10);
config.setMinimumIdle(5);
config.setConnectionTimeout(30000);
return new HikariDataSource(config);
}
}
Application Request
|
v
+--------------------+
| HikariCP Pool |
+--------------------+
| | |
Idle Idle Idle
| | |
Borrow Connection
|
v
Execute Query
|
v
Return to Pool
logging.level.com.zaxxer.hikari=DEBUG
Example Logs
HikariPool-1 - Starting... HikariPool-1 - Added connection conn1 HikariPool-1 - Pool stats (total=10, active=2, idle=8)
connections = (CPU cores * 2) + disk count
spring.datasource.hikari.leak-detection-threshold=2000
Connection is not available, request timed out
| Pool | Performance | Memory | Popularity |
|---|---|---|---|
| HikariCP | Excellent | Low | Very High |
| C3P0 | Low | Medium | Old |
| Apache DBCP | Medium | Medium | Medium |
| Tomcat Pool | Good | Medium | Good |
spring.datasource.hikari.maximum-pool-size=30 spring.datasource.hikari.minimum-idle=10 spring.datasource.hikari.idle-timeout=300000 spring.datasource.hikari.max-lifetime=1700000 spring.datasource.hikari.connection-timeout=20000 spring.datasource.hikari.pool-name=ProductionPool