NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Maven Central · #662 by repository stars
Ultimate JDBC Connection Pool
Last release 3 months ago
14 Jun 2026
Ships unpredictably
gaps range from 8 days to 1.8 years
Nearly every release is documented
notes for 55 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
104 releases · first in 2013
merged #2402 avoid virtual-thread yield spin in ConcurrentBag. Thanks to @ittaigolde for addressing this and deep investigation into the issue.
decrease thread yield frequency in ConcurrentBag.unreserve()
merged #2346 fix regression with setSchema behavior
One column per quarter.
merged #2346 fix regression with setSchema behavior
decrease thread yield frequency in ConcurrentBag.requite()
merged #2340 NoSuchMethodException error that is thrown when setting a metric registry, fixes to UtilityElf reflection code to use the correct method
merged #2340 NoSuchMethodException error that is thrown when setting a metric registry, fixes to UtilityElf reflection code to use the correct method signature.
fixed #1294 add support for HikariCredentialsProvider class
fixed #2265 bail out of the pool filling loop if the thread is interrupted
backport #2340 NoSuchMethodException error that is thrown when setting a metric registry, fixes to UtilityElf reflection code to use the correct metho
fixed #2342 restore module-info.class to jar file, which was lost in 6.3.1
fixed #2342 restore module-info.class to jar file, which was lost in 6.3.1
fixed #2256 add support for legacy override of getUsername()/getPassword() of HikariDataSource. See project page for documentation of system property com.zaxxer.hikari.legacy.supportUserPassDataSourceOverride.
fixed #2323 right or wrong (wrt driver behavior) return to previous Connection.get/setSchema behavior
fixed #2288 upgrade dependencies and fix build warnings
fixed #2315 source jar contains also binary .class files and missing some .java files
fixed #2315 source jar contains also binary .class files and missing some .java files
fixed #2307 remove improper hardcoded timout, use validationTimeout
fixed #2305 keep properties key and values as is rather than forcing stringification. Also fixes #2286 and #2304
upgraded various maven plugin dependencies to latest versions
increase keepaliveTime variance from 10% to 20%
increase keepaliveTime variance from 10% to 20%
merged #2266 support duration values for configuration from properties, such as 10ms, 20s, 30m, 40h or 50d
merged #2284 align logs from HikariPool.logPoolState()
merged #2285 set default value for maxIdle in HikariConfig constructor (no functional change)
merged #2294 Allow setting String[] and int[] properties (useful for pgjdbc HA configuration)
merged #2300 catch java.lang.Error instead of java.lang.Exception under certain conditions
change default keepaliveTime to 2 minutes
change default keepaliveTime to 2 minutes
fix commons-compress dependency, make test scope
update test dependencies that were flagged as having vulnerabilities
merged #2238 handle SQLTimeoutException without eviction. Users looking to preserve previous behavior should provide an implementation of com.zaxxer.hikari.SQLExceptionOverride to the pool configuration.
added new enum value, Override.MUST_EVICT, available to implementations of com.zaxxer.hikari.SQLExceptionOverride
enhanced debug logging in circumstances where the pool falls to zero size and new connections to the database continue to fail.
update test dependencies that were flagged as having vulnerabilities
fixed #1960 allow SQLExceptionOverride to adjudicate all exceptions for eviction
fixed #1960 allow SQLExceptionOverride to adjudicate all exceptions for eviction
merged #1962 dropwizard 5 metrics are now supported via the setMetricRegistry() method in HikariConfig and in HikariDataSource
merged #2244 improve JavassistProxyFactory
merged #2243 fix inconsistency between isWrapperFor and unwrap
merged #1827 support loading properties file in unnamed resources module
merged #1842 don't clear isCommitStateDirty flag in setReadOnly
change default maxLifetime variance from 2.5% to 25% to further avoid mass connection die-off dips
fixed #2152 duplicate connection in try with resources clause caused close() being called twice on each connection
fixed #2152 duplicate connection in try with resources clause caused close() being called twice on each connection
merged #2226 consistent handling of errorCode and sqlState in timeout exception
merged #2199 eliminate network call if state get is called after set
merged #2189 add support to get and set db credentials in an atomic operation
merged #2149 make Savepoint rollbacks mark the connection dirty
merged #2157 close connections marked as evicted instead of returning them to the pool
merged #2147 skip Connection::setNetworkTimeout if PoolBase::shutdownNetworkTimeoutExecutor is called
merged #2126 added Support For beginRequest and endRequest
small improvements and cleanup from pull request #2166
minor debug logging enhancements
fixed #1907 re-added automatic.module.name that was lost along the way
fixed #1907 re-added automatic.module.name that was lost along the way
fixed #1986 evict connection exceptions with (SQLState HY000) error code 1105.
merged #2059 add support for char[] in DataSource properties
merged #1979 and #1993 mask any property that looks like a password in URLs
add pool stats to connection acquisition timeout exception
merged #2076 don't case metric registry before it is checked for null
merged #1820 allow minimum login timeout to be set as system property
merged #1952 add more isolation levels
merged #1660 remove redundant error log for poll initialization exception
Update log4j version to 2.17.1 to address Log4Shell vulnerability (although this is only used in tests, so it doesn't really impact users)
rewrote connection elide/add code to fix an unconfirmed but occasionally reported race condition that results in the pool draining to 0 and not refill
fixed #1735 added system property to permit override of lower limit of connectionTimeout and validation timeout
fixed regression caused by #1605 affecting block-until-filled semantic
fixed #1725 pom file change to be more gradle-friendly
fixed #1725 pom file change to be more gradle-friendly
fixed #1726 regression in micrometrics caused by lack of a strong reference to an object
merged #1669 #1582 mark optional dependencies as 'require static' in module-info
merged #1669 #1582 mark optional dependencies as 'require static' in module-info
merged #1700 remove micrometer metrics upon close
merged #1661 mark generated proxy classes final
merged #1681 allow alternate, more standard, JMX ObjectName, enabled by setting system property 'hikaricp.jmx.register2.0=true'
merged #1605 fixes Java 11 issue where setMaximumPoolSize needs to be called before setCorePoolSize in ThreadPoolExecutor
merged #1581 handle setting java 'short' property values from property files
merged #1699 add new configuration property 'keepaliveTime'
merged #1692 fix prometheus histogram metric tracker for multiple pools
fixed 1578 build change to ensure that proxies are generated using Java 8, otherwise we end up with class references to Java 11 classes, which fail to
Build HikariCP as a JEP 238 Multi-Release jar for increased compatability with Java 11 and future modularized Java versions.
fixed 1534 check resultSet.getStatement() for null in ProxyDatabaseMetaData.
fixed 1534 check resultSet.getStatement() for null in ProxyDatabaseMetaData.
add additional debug logging around connection add.
add ThreadLocal removal attempt when bag item is removed.
fixed 1528 regression caused by pull request 1159 whereby fail-fast logic would exit upon all errors even if it was configured to continue trying.
fix regression caused by 1337, which broke the ability to pass the isolation level by integer value (string) instead of isolation level name.
merged 1265 alternative Prometheus metrics Histogram instead of locking Summary (which is purportedly quite lock-heavy.
merged 1265 alternative Prometheus metrics Histogram instead of locking Summary (which is purportedly quite lock-heavy.
merged 1337 support accepting TRANSACTION_SQL_SERVER_SNAPSHOT_ISOLATION_LEVEL string for isolation level.
merged 1331 user contribution: major refactor of metrics handling, hopefully without any breakage.
add proxy class for DatabaseMetaData to intercept DatabaseMetaData.getConnection() call which was leaking the raw database Connection object.
fixed 1287 set core pool size before max pool size
fixed 1287 set core pool size before max pool size
fixed 1308 treat a SQLTimeoutException as an evictable offense
do not default maxPoolSize to minIdle when only minIdle is specified
do not log warning about idleTimeout unless minimumIdle is less than maxPoolSize (because otherwise it does not apply)
Revert change where Connection.isClosed() was called outside of setNetworkTimeout() block, opening vulnerability to unacknowledged TCP traffic.
Revert change where Connection.isClosed() was called outside of setNetworkTimeout() block, opening vulnerability to unacknowledged TCP traffic.
fixed 1186 limit number of items in the ConcurrentBag's ThreadLocal list to avoid OOM errors in some borrow/requite patterns.
Merged changed to log uncaught (Throwable) exceptions during connection acquisition.
fixed 1161 fix logging formatting anchor.
fixed 1181, 1182 allow passing a Prometheus CollectorRegistry rather than always using the default registry.
merged 1210 use orElseGet() to delay call until necessary with respect to the housekeeper thread factory.
fixed 1074 capability to instantiate an object based on the String class name, usefull when you want to set the MetricsTackerFactory from a property.
merged 1250 fix proxy classes generation reproducibility using a sorted LinkedHashSet
various clean-ups pointed out by sonarcloud.io
merged 1290 Class.newInstance() is deprecated as of Java 9. Usage should be replaced by calling Class.getDeclaredConstructor().newInstance().
fixed #1305 ensure that ConcurrentBag.add() does not spin under high load, when waiting threads may never reach 0.
fixes #1287 when system property blockUntilFilled is set, use multiple threads to fill the pool.
check connection closed condition before attempting to set network timeout to avoid spurios exceptions in the log.
check connection closed condition before attempting to set network timeout to avoid spurios exceptions in the log.
updated validation failure message to include recommendation to check maxLifetime value.
fixed 1141 do not throw SQLException when calling isClosed() or close() on a already closed unwrapped Connection, as per JDBC specification.
fixed 1137 support changing user/password at runtime for DriverDataSource-wrapped driver connections.
fixed 1136 log loaded driver when using jdbcUrl.
pull 1135 extract sealed pool check into independent method.
fixed 1126 correct error in JavaDoc for HikariConfig.setInitializationFailTimeout().
fixed 1114 removed unreachable code.
Add get/setCatalog() to HikariConfigMXBean, allowing the catalog to be changed at runtime. The catalog should only be changed while the pool is suspen
Removed previously deprecated methods; HikariConfig.copyState() HikariConfig.getScheduledExecutorService() HikariConfig.setScheduledExecutorService()…
Removed previously deprecated methods; HikariConfig.copyState() HikariConfig.getScheduledExecutorService() HikariConfig.setScheduledExecutorService() HikariConfig.isInitializationFailFast() HikariConfig.setInitializationFailFast() HikariConfig.isJdbc4ConnectionTest() HikariConfig.setJdbc4ConnectionTest()
HikariDataSource.copyState() HikariDataSource.getScheduledExecutorService() HikariDataSource.setScheduledExecutorService() HikariDataSource.suspendPool() HikariDataSource.resumePool() HikariDataSource.shutdown() HikariDataSource.isInitializationFailFast() HikariDataSource.setInitializationFailFast() HikariDataSource.isJdbc4ConnectionTest() HikariDataSource.setJdbc4ConnectionTest()
pull 1110 add currently configured maxConnections and minConnections to pool metrics.
pull 1100 remove hard-coded percentiles for Micrometer metrics.
pull 1108 maintain a strong reference to PoolStats for Micrometer gauges to prevent premature garbage collection.
pull 1098 update to Micrometer 1.0.0.
Nothing published for this version
fixed 1095 fix breakage caused by sealed configuration with respect to special handling for the metricsRegistry and metricsTrackerFactory properties,
fixed 1095 fix breakage caused by sealed configuration with respect to special handling for the metricsRegistry and metricsTrackerFactory properties, which are allowed to be altered once after the pool has started (even after the configuration is sealed).
pull 1089 allowing anonymous subclasses of MetricRegistry. Changed checks for metrics libraries from a class name check to the assignableFrom() API.
fixed issue whereby configuration through the HikariConfigMXBean could not be altered due to the sealed configuration change introduced in 2.7.5.
issue 1064 fixed regression where HikariConfig.copyStateTo() propagated the "sealed" status of the source configuration to the target configuration --
issue 1061/pull 1062 fixed compatibility issue with requery.io caused by HikariCP's proxied Statement class returning a driver-native ResultSet instan
issue 1061/pull 1062 fixed compatibility issue with requery.io caused by HikariCP's proxied Statement class returning a driver-native ResultSet instance from getGeneratedKeys() instead of returning a HikariCP proxied ResultSet.
pull 1058 enable quantiles on Prometheus metrics.
pull 1055 fixed incorrect JavaDoc for HikariConfigMXBean.getMinimumIdle() method.
issue 1045/pull 1047 added Automatic-Module-Name to jar manifest to ensure that the Java 8 library plays well with the Java 9 module system.
introduced the concept of a "sealed" configuration. Once a pool is started, attempts to alter its configuration outside of the HikariConfigMXBean will result in an IllegalStateException.
pull 1026 added support for SQL Server's specific isolation level (SNAPSHOT).
pull 1026 added support for SQL Server's specific isolation level (SNAPSHOT).
issue 926/pull 1022 HikariJNDIFactory should not throw a NamingException or else cascading to other object factories cannot occur.
issue 1003 added PostgreSQL SQL State 0A000 to list of unrecoverable states calling for eviction.
issue 1003 added PostgreSQL SQL State 0A000 to list of unrecoverable states calling for eviction.
pull 1002 updated micrometer support due to API changes in their release candidate.
issue 983 fix logic that determines how many idle connections can be removed, without violating the minimumIdle contract.
issue 983 fix logic that determines how many idle connections can be removed, without violating the minimumIdle contract.
pull 987 add thread name to leak detection messages.
issue 982 fix classloader order, try the ThreadContext classloader before other classloaders.
pull 977 log better messages when connection is evicted.
fallback to four digit random pool suffix when SecurityManager prevents writing to system properties for the purpose of JVM-wide unique pool identifiers.
issue 968 Wrong label order in MicrometerMetricsTracker for the connection usage metric.
issue 968 Wrong label order in MicrometerMetricsTracker for the connection usage metric.
issue 967 incorrect bitwise operator value in ConcurrentBag.requite method intended to cause parkNanos() to be called every 256 iterations. Thanks to @ztkmkoo for finding this.
added support for micrometer metrics (currently Alpha-level support).
added support for micrometer metrics (currently Alpha-level support).
issue 905 mask JDBC password in URLs
issue 940 fix Prometheus metric collector for multiple data config
issue 941 add support for setting a default schema
issue 955 fix possible race condition when Statements are closed on different threads from which they were created.
issue 878 load driver class from ThreadContext classloader if it is not found via the regular classloader.
issue 890 add support for Prometheus metrics and multiple HikariCP pools.
issue 890 add support for Prometheus metrics and multiple HikariCP pools.
issue 880 fix race condition caused by sorting collection while the condition of sort can change.
issue 876 add support for using a Prometheus CollectorRegistry other than the default one.
issue 867 support network timeout even for Connection.isValid().
issue 866 mark commit state dirty when Connection.getMetaData() is called.
issue 821 if a disconnection class exception is thrown during initial connection setup, do not set the flag that indicates that checkDriverSupport() i
issue 821 if a disconnection class exception is thrown during initial connection setup, do not set the flag that indicates that checkDriverSupport() is complete.
issue 835 fix increased CPU consumption under heavy load caused by excessive spinning in the ConcurrentBag.requite() method.
issue 817 updated behavior of new initializationFailTimeout, please see the official documentation for details.
issue 742 add direct MXBean accessor methods to HikariDataSource for users who do not want run run JMX.
issue 793 add new HikariConfig method, setScheduledExecutor(ScheduledExecutorService), and deprecate method setScheduledExecutorService(ScheduledThrea…
Redesign of the contention code path resulting in doubling contended throughput; now contended pool access retains 98% of the uncontended throughput.
issue 793 add new HikariConfig method, setScheduledExecutor(ScheduledExecutorService), and deprecate method setScheduledExecutorService(ScheduledThreadPoolExecutor). It is unfortunate that the deprecated method has the more accurate name, but its signature cannot be changed without breaking binary compatibility.
issue 770 add a new property initializationFailTimeout, and deprecate configuration property initializationFailFast.
issue 774 significantly improve spike load handling.
issues 518/769 add new metric for tracking how long physical connection acquisition is taking. DropWizard histogram name "ConnectionCreation", and Prometheus summary name "hikaricp_connection_creation_millis".
issue 741 cancel HouseKeeper task on pool shutdown. If the ScheduledExecutor being used did not belong to HikariCP, this task would remain scheduled after shutdown, causing a memory leak.
issue 781 more technically accurate wording of pool startup and shutdown log messages.
issue 719 only reset lastConnectionFailure after a successful dataSource.getConnection() call.
issue 719 only reset lastConnectionFailure after a successful dataSource.getConnection() call.
issue 716 do not scan deeper than 10 nested SQLExceptions, it's typically a trap ... a chain that never terminates.
issue 714 fix possible issue with cross-thread visibility. Change pool entry state from AtomicInteger w/lazySet() to a volatile int with use of AtomicIntegerFieldUpdater.
Release 2.5.0 marks the start of a Java 8 HikariCP artifact. The Java 7 artifact is now called "HikariCP-java7".
Release 2.5.0 marks the start of a Java 8 HikariCP artifact. The Java 7 artifact is now called "HikariCP-java7".
HikariCP 2.5.0 and HikariCP-java7 2.4.8 have identical functionality.
Miscellaneous stability improvements.
Miscellaneous stability improvements.
Removed Oracle SQL state 61000, added specific error code (2399) to evict connections when it is encountered.
issue 664: do not recycle PoolEntry objects that have closed their held connection.
issue 641, 643: reflection used method String.toUpperCase() without a Locale, which causes problems in some locales such as Turkish.
pull 632: added support for Prometheus metrics tracker.
issue 650: detect Amazon Redshift connection refused error codes.
Added Oracle SQL error code 61000 (exceeded maximum connect time) to evict connections when it is encountered.
Added Oracle SQL error code 61000 (exceeded maximum connect time) to evict connections when it is encountered.
issue 621: fix NPE in shutdown if invoked during initialization.
issue 606, 610: housekeeper thread was running before all class members were initialized, causing an unrecoverable exception and disabling idle connection retirement (maximumLifetime still applied).
issue 596: fix bug that occurs when minimumIdle is set to 0, but maximumPoolSize is not explicitly set.
issue 596: fix bug that occurs when minimumIdle is set to 0, but maximumPoolSize is not explicitly set.
issue 594: fix incompatibility with various libraries caused by storing a non-String object in System properties.
issue 593: improve logging when network timeout is not supported by the driver
issue 591: improve thread-safety of Statement proxies
Generate unique sequential pool names, even across container classloaders to avoid JMX name collisions when registering pools.
Generate unique sequential pool names, even across container classloaders to avoid JMX name collisions when registering pools.
Improve pool stability when running on computers using power-saving or sleep modes where wake-up previously caused pool to grow to maximum size.
Improve pool stability under severe thread-starvation conditions. Previous code could interpret prolonged starvation (exceeding one minute) as non-contiguous clock advancement, and reacted by soft-evicting connections (unnecessarily).
Added connection timeout rate to Dropwizard metrics (ConnectionTimeoutRate).
issue 563: Do not start the house-keeping thread until after pool initialisation has succeeded.
issue 559: Ensure the pool refill after house-keeping does not enqueue more add connection requests if there are already minimumIdle requests pending.
issue 555: include support for Java 8 interface 'default' methods during proxy generation.
issue 547: decreased allowable minimum connectionTimeout and validationTimeout to 250ms.
issue 495: implemented iterator() method on custom FastList to support Tomcat memory leak detection.
Improve pool shutdown behavior. Stop active connection acquisition once the shutdown sequence has initiated.
Improve pool shutdown behavior. Stop active connection acquisition once the shutdown sequence has initiated.
Improved detection and reporting of ambiguous pool configuration, when both the connection URL and DataSource class names are specified.
Improve accuracy of timeouts for getConnection() calls by accounting for possibly long delay aliveness tests.
Improve accuracy of timeouts for getConnection() calls by accounting for possibly long delay aliveness tests.
Improve adherence to minimumIdle goal by closing idle connections starting from longest idle time to shortest. Additionally, stop when minimumIdle is reached even if connections exceeding idleTimeout remain (but are still within maxLifetime).
Introduce larger variance into maxLifetime to avoid mass connection closing and subsequent new connection creation load on the database. Connections now have a maximum lifetime between 97.5-100% of configured maxLifetime. In the case of the default 30 minute lifetime, this generates actual lifetimes with a maximum deviation of 45 seconds. Currently, no attempt is made to further avoid clustering that may occur due to randomness.
Ongoing com.zaxxer.hikari.metrics refactors. This is not considered public API until such time as we announce it. Caveat lector.
Performance improvements in the getConnection()/close() hot path.
issue 452: fixed race condition when creating an rapidly ramping connections in the pool.
issue 415: removed use of java.beans classes to allow use of HikariCP with the Zulu JRE compact3 profile.
issue 406: execute validation query during connection setup to make sure it is valid SQL.
issue 380: housekeeper was not being scheduled in the case of a user specified ScheduledExecutorService instance.
issue 380: housekeeper was not being scheduled in the case of a user specified ScheduledExecutorService instance.
issue 340: rollback change that elides setting the readonly property if the user never explicitly configured it. See discussion in the Github issue tracker. Also fixes binary ABI breakage between 2.3.9 and 2.4.0.
issue 379: stop closing idle connections, to keep minimumIdle connections in pool
issue 375: fixed InvalidPathException in HikariConfig
issue 362: fixed NullPointerException in closing connection (closing statements)
issue 357: allow altering the username & password through JMX at runtime
issue 349: handle integer Transaction isolation level
Throw SQLTransientConnectionException instead of SQLTimeoutException
for validating connection, if network time out is set, do not set query timeout too
ResultSet.getStatement() should return StatementProxy
Pool configuration properties and DataSource methods previously marked as @Deprecated have been removed.
Consolidated distribution into single JVM target (Java 7/8). Java 6 support has entered maintenance mode, bug fixes will continue on the 2.3.x branch.
Removed runtime dependency on Javassist by pre-generating proxy classes at build-time.
Significantly reduced overhead, and increased reliability, of ConcurrentBag.
Reduced garbage generation by 2-3x.
Add connection soft-eviction and replacement if backward system clock motion or significant forward jumps (greater than 1 minute) are detected.
Pool configuration properties and DataSource methods previously marked as @Deprecated have been removed.
Deprecated HikariDataSource.shutdown() in favor of close().
Improve shutdown performance.
Allow user specified ScheduledThreadPoolExecutor for housekeeping timer. Useful in applications with dozens or hundreds of pools in the same JVM.
Reduce overhead and accuracy of Dropwizard gauges.
issue 512: reduce the number of calls made to Connection.getAutoCommit().
Fixed issue with proxy generation whereby the generated classes contain the major version number for Java 8, which makes them incompatible with the Ja
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →