diff --git a/pom.xml b/pom.xml
index 1a333333a6..c5ac497114 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,6 +32,7 @@
1.0
5.0.1
8.0.30
+ 3.35.0
5.9.0
4.7.0
@@ -59,6 +60,12 @@
mysql-connector-java
${mysql-connector-java.version}
+
+ org.jdbi
+ jdbi3-core
+ ${jdbi-version}
+
+
diff --git a/src/main/java/tools/DatabaseConnection.java b/src/main/java/tools/DatabaseConnection.java
index 337c07b14e..a5607477a6 100644
--- a/src/main/java/tools/DatabaseConnection.java
+++ b/src/main/java/tools/DatabaseConnection.java
@@ -3,9 +3,12 @@ package tools;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import config.YamlConfig;
+import org.jdbi.v3.core.Handle;
+import org.jdbi.v3.core.Jdbi;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.time.Duration;
@@ -21,15 +24,24 @@ import static java.util.concurrent.TimeUnit.SECONDS;
public class DatabaseConnection {
private static final Logger log = LoggerFactory.getLogger(DatabaseConnection.class);
private static HikariDataSource dataSource;
+ private static Jdbi jdbi;
public static Connection getConnection() throws SQLException {
if (dataSource == null) {
- throw new IllegalStateException("Unable to get connection from uninitialized connection pool");
+ throw new IllegalStateException("Unable to get connection - connection pool is uninitialized");
}
return dataSource.getConnection();
}
+ public static Handle getHandle() {
+ if (jdbi == null) {
+ throw new IllegalStateException("Unable to get handle - connection pool is uninitialized");
+ }
+
+ return jdbi.open();
+ }
+
private static String getDbUrl() {
// Environment variables override what's defined in the config file
// This feature is used for the Docker support
@@ -73,6 +85,7 @@ public class DatabaseConnection {
Instant initStart = Instant.now();
try {
dataSource = new HikariDataSource(config);
+ initializeJdbi(dataSource);
long initDuration = Duration.between(initStart, Instant.now()).toMillis();
log.info("Connection pool initialized in {} ms", initDuration);
return true;
@@ -84,4 +97,9 @@ public class DatabaseConnection {
// Timed out - failed to initialize
return false;
}
+
+ private static void initializeJdbi(DataSource dataSource) {
+ // TODO: configure row mappers
+ jdbi = Jdbi.create(dataSource);
+ }
}