diff --git a/CHANGES b/CHANGES
index 7d84bcde6..b83d4d807 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,15 @@
HikariCP Changes
+Changes in 6.3.1
+
+ * 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
+
Changes in 6.3.0
* increase keepaliveTime variance from 10% to 20%
diff --git a/README.md b/README.md
index 55fa92c85..9f68aeaf2 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@ Fast, simple, reliable. HikariCP is a "zero-overhead" production ready JDBC con
----------------------------------------------------
> [!IMPORTANT]
-> In order to avoid a rare condition where the pool goes to zero and does not recover it is necessary to configure *TCP keepalive*. Some JDBC drivers support this via properties, for example ``tcpKeepAlive=true`` on PostgreSQL, but in any case it can also be configured at the OS-level. See [Setting OS TCP Keepalive](https://github.com/brettwooldridge/HikariCP/wiki/Setting-OS-TCP-Keepalive) and/or [TCP keepalive for a better PostgreSQL experience](https://www.cybertec-postgresql.com/en/tcp-keepalive-for-a-better-postgresql-experience/#setting-tcp-keepalive-parameters-on-the-operating-system).
+> In order to avoid a rare condition where the pool goes to zero and does not recover it is necessary to configure *TCP keepalive*. Some JDBC drivers support this via properties, for example ``tcpKeepAlive=true`` on PostgreSQL, but in any case it can also be configured at the OS-level. See [Setting OS TCP Keepalive](https://github.com/brettwooldridge/HikariCP/wiki/Setting-Driver-or-OS-TCP-Keepalive) and/or [TCP keepalive for a better PostgreSQL experience](https://www.cybertec-postgresql.com/en/tcp-keepalive-for-a-better-postgresql-experience/#setting-tcp-keepalive-parameters-on-the-operating-system).
----------------------------------------------------
@@ -38,12 +38,12 @@ Fast, simple, reliable. HikariCP is a "zero-overhead" production ready JDBC con
### Artifacts
-_**Java 11+** maven artifact:_
+_**Java 11 or greater** maven artifact:_
```xml
com.zaxxer
HikariCP
- 6.2.1
+ 6.3.0
```
_Java 8 maven artifact (*deprecated*):_
diff --git a/pom.xml b/pom.xml
index 18fa06421..750eb27e9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,18 +24,13 @@
-
- true
-
0.45.0
5.1.1
7.0.5
5.4.24.Final
3.29.2-GA
0.11.4.1
- 3.0.1
+ 2.5.3
3.2.5
5.0.0-rc17
1.5.10
@@ -54,7 +49,7 @@
com.zaxxer
HikariCP
- 6.3.1-SNAPSHOT
+ 6.3.2-SNAPSHOT
bundle
HikariCP
@@ -73,13 +68,6 @@
HEAD
-
-
- ossrh
- https://oss.sonatype.org/content/repositories/snapshots
-
-
-
https://github.com/brettwooldridge/HikariCP/issues
@@ -287,12 +275,6 @@
-
-
- target/classes
-
-
-
@@ -312,82 +294,16 @@
-
- org.apache.maven.plugins
- maven-deploy-plugin
- 2.8.2
-
-
-
- org.apache.maven.plugins
- maven-gpg-plugin
- 3.0.1
-
-
-
- org.apache.maven.plugins
- maven-release-plugin
- 2.5.3
-
-
-
- org.sonatype.plugins
- nexus-staging-maven-plugin
- 1.6.12
-
-
org.apache.maven.plugins
maven-surefire-plugin
- 3.0.0-M8
+ 3.5.3
${surefireArgLine} ${sureFireOptions11}
${sureFireForks11}
-
-
- org.apache.maven.plugins
- maven-source-plugin
- 3.0.1
-
-
- true
-
-
-
- attach-sources
-
- jar-no-fork
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- 3.6.0
-
- public
-
- com.zaxxer.hikari.hibernate:com.zaxxer.hikari.metrics.*:com.zaxxer.hikari.pool:com.zaxxer.hikari.util
-
- true
- 1024m
-
-
-
- bundle-sources
- package
-
- jar
-
-
-
-
@@ -395,7 +311,7 @@
org.apache.maven.plugins
maven-enforcer-plugin
- 3.4.1
+ 3.5.0
enforce-maven
@@ -415,7 +331,7 @@
maven-dependency-plugin
- 2.8
+ 3.8.1
generate-sources
@@ -508,7 +424,7 @@
org.jacoco
jacoco-maven-plugin
- 0.8.8
+ 0.8.13
@@ -549,7 +465,7 @@
org.apache.maven.plugins
maven-failsafe-plugin
- 3.0.0-M3
+ 3.5.3
@@ -654,10 +570,25 @@
+
+
+ org.apache.maven.plugins
+ maven-release-plugin
+ ${maven.release.version}
+
+ clean verify
+
+
+
org.apache.maven.plugins
maven-source-plugin
- 3.3.0
+ 3.0.1
+
+
+ true
+
attach-sources
@@ -672,9 +603,18 @@
org.apache.maven.plugins
maven-javadoc-plugin
3.6.0
+
+ public
+ false
+ ${project.build.sourceDirectory}
+ com.zaxxer.hikari.hibernate:com.zaxxer.hikari.metrics.*:com.zaxxer.hikari.pool:com.zaxxer.hikari.util
+ true
+ 1024m
+
- attach-javadocs
+ bundle-sources
+ package
jar
@@ -682,11 +622,10 @@
-
org.apache.maven.plugins
maven-gpg-plugin
+ 3.0.1
sign-artifacts
@@ -698,18 +637,24 @@
-
- org.sonatype.plugins
- nexus-staging-maven-plugin
+ org.sonatype.central
+ central-publishing-maven-plugin
+ 0.7.0
true
- ${autoReleaseStagedArtifacts}
- https://oss.sonatype.org/
- ossrh
+ central
+ false
+
+
+ publish
+ deploy
+
+ publish
+
+
+
diff --git a/publish.sh b/publish.sh
new file mode 100755
index 000000000..da47e3a48
--- /dev/null
+++ b/publish.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+mvn clean && mvn package -DskipTests -Dmaven.test.skip=true && mvn release:prepare -Prelease && mvn deploy -DperformRelease=true -DskipTests -Dmaven.test.skip=true
diff --git a/src/main/java/com/zaxxer/hikari/pool/PoolBase.java b/src/main/java/com/zaxxer/hikari/pool/PoolBase.java
index 1921db1b0..2e8eae089 100644
--- a/src/main/java/com/zaxxer/hikari/pool/PoolBase.java
+++ b/src/main/java/com/zaxxer/hikari/pool/PoolBase.java
@@ -475,7 +475,7 @@ private void checkValidationSupport(final Connection connection) throws SQLExcep
{
try {
if (isUseJdbc4Validation) {
- connection.isValid(1);
+ connection.isValid(Math.max(1, (int) MILLISECONDS.toSeconds(validationTimeout)));
}
else {
executeSql(connection, config.getConnectionTestQuery(), false);
diff --git a/src/main/java/com/zaxxer/hikari/util/DriverDataSource.java b/src/main/java/com/zaxxer/hikari/util/DriverDataSource.java
index fe7f908c1..4d9e3d5d9 100644
--- a/src/main/java/com/zaxxer/hikari/util/DriverDataSource.java
+++ b/src/main/java/com/zaxxer/hikari/util/DriverDataSource.java
@@ -45,9 +45,7 @@ public DriverDataSource(String jdbcUrl, String driverClassName, Properties prope
this.jdbcUrl = jdbcUrl;
this.driverProperties = new Properties();
- for (var entry : properties.entrySet()) {
- driverProperties.setProperty(entry.getKey().toString(), entry.getValue().toString());
- }
+ driverProperties.putAll(properties);
if (username != null) {
driverProperties.put(USER, driverProperties.getProperty(USER, username));
@@ -57,45 +55,34 @@ public DriverDataSource(String jdbcUrl, String driverClassName, Properties prope
}
if (driverClassName != null) {
- var drivers = DriverManager.getDrivers();
- while (drivers.hasMoreElements()) {
- var d = drivers.nextElement();
- if (d.getClass().getName().equals(driverClassName)) {
- driver = d;
- break;
- }
- }
-
- if (driver == null) {
- LOGGER.warn("Registered driver with driverClassName={} was not found, trying direct instantiation.", driverClassName);
- Class> driverClass = null;
- var threadContextClassLoader = Thread.currentThread().getContextClassLoader();
- try {
- if (threadContextClassLoader != null) {
- try {
- driverClass = threadContextClassLoader.loadClass(driverClassName);
- LOGGER.debug("Driver class {} found in Thread context class loader {}", driverClassName, threadContextClassLoader);
- }
- catch (ClassNotFoundException e) {
- LOGGER.debug("Driver class {} not found in Thread context class loader {}, trying classloader {}",
- driverClassName, threadContextClassLoader, this.getClass().getClassLoader());
- }
+ LOGGER.warn("Registered driver with driverClassName={} was not found, trying direct instantiation.", driverClassName);
+ Class> driverClass = null;
+ var threadContextClassLoader = Thread.currentThread().getContextClassLoader();
+ try {
+ if (threadContextClassLoader != null) {
+ try {
+ driverClass = threadContextClassLoader.loadClass(driverClassName);
+ LOGGER.debug("Driver class {} found in Thread context class loader {}", driverClassName, threadContextClassLoader);
}
-
- if (driverClass == null) {
- driverClass = this.getClass().getClassLoader().loadClass(driverClassName);
- LOGGER.debug("Driver class {} found in the HikariConfig class classloader {}", driverClassName, this.getClass().getClassLoader());
+ catch (ClassNotFoundException e) {
+ LOGGER.debug("Driver class {} not found in Thread context class loader {}, trying classloader {}",
+ driverClassName, threadContextClassLoader, this.getClass().getClassLoader());
}
- } catch (ClassNotFoundException e) {
- LOGGER.debug("Failed to load driver class {} from HikariConfig class classloader {}", driverClassName, this.getClass().getClassLoader());
}
- if (driverClass != null) {
- try {
- driver = (Driver) driverClass.getDeclaredConstructor().newInstance();
- } catch (Exception e) {
- LOGGER.warn("Failed to create instance of driver class {}, trying jdbcUrl resolution", driverClassName, e);
- }
+ if (driverClass == null) {
+ driverClass = this.getClass().getClassLoader().loadClass(driverClassName);
+ LOGGER.debug("Driver class {} found in the HikariConfig class classloader {}", driverClassName, this.getClass().getClassLoader());
+ }
+ } catch (ClassNotFoundException e) {
+ LOGGER.debug("Failed to load driver class {} from HikariConfig class classloader {}", driverClassName, this.getClass().getClassLoader(), e);
+ }
+
+ if (driverClass != null) {
+ try {
+ driver = (Driver) driverClass.getDeclaredConstructor().newInstance();
+ } catch (Exception e) {
+ LOGGER.warn("Failed to create instance of driver class {}, trying jdbcUrl resolution", driverClassName, e);
}
}
}
diff --git a/src/test/java/com/zaxxer/hikari/util/DriverDataSourceTest.java b/src/test/java/com/zaxxer/hikari/util/DriverDataSourceTest.java
index c0bd5b381..26e4a3df6 100644
--- a/src/test/java/com/zaxxer/hikari/util/DriverDataSourceTest.java
+++ b/src/test/java/com/zaxxer/hikari/util/DriverDataSourceTest.java
@@ -18,6 +18,8 @@
import org.junit.Test;
+import java.lang.reflect.Field;
+import java.time.Duration;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
@@ -26,6 +28,18 @@
public class DriverDataSourceTest {
+ @Test
+ public void testDriverProperties() throws Exception {
+ Properties properties = new Properties();
+ Duration timeout = Duration.ofSeconds(60);
+ properties.put("timeout", timeout);
+ var driverDataSource = new DriverDataSource("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", null, properties, "", "");
+ Field field = DriverDataSource.class.getDeclaredField("driverProperties");
+ field.setAccessible(true);
+ Properties driverProperties = (Properties) field.get(driverDataSource);
+ assertEquals(timeout, driverProperties.get("timeout"));
+ }
+
@Test
public void testJdbcUrlLogging() {
List urls = Arrays.asList(
diff --git a/src/test/resources/log4j2-test.xml b/src/test/resources/log4j2-test.xml
index 85d33b927..f287ff1a3 100644
--- a/src/test/resources/log4j2-test.xml
+++ b/src/test/resources/log4j2-test.xml
@@ -1,7 +1,7 @@
-
+