From 4bb1b8191170fd7865f73a51a7a180b038abe976 Mon Sep 17 00:00:00 2001 From: Mateusz Witkowski Date: Fri, 22 Nov 2024 14:55:15 +0100 Subject: [PATCH] Added H2 database connection type --- .../DataSourceConnectionFactory.java | 2 + .../datasource/DatabaseProductName.java | 1 + .../spring/datasource/h2/H2Connection.java | 55 +++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 hofund-spring/src/main/java/dev/logchange/hofund/connection/spring/datasource/h2/H2Connection.java diff --git a/hofund-spring/src/main/java/dev/logchange/hofund/connection/spring/datasource/DataSourceConnectionFactory.java b/hofund-spring/src/main/java/dev/logchange/hofund/connection/spring/datasource/DataSourceConnectionFactory.java index d3d0128..6f067e9 100644 --- a/hofund-spring/src/main/java/dev/logchange/hofund/connection/spring/datasource/DataSourceConnectionFactory.java +++ b/hofund-spring/src/main/java/dev/logchange/hofund/connection/spring/datasource/DataSourceConnectionFactory.java @@ -1,6 +1,7 @@ package dev.logchange.hofund.connection.spring.datasource; import dev.logchange.hofund.connection.HofundDatabaseConnection; +import dev.logchange.hofund.connection.spring.datasource.h2.H2Connection; import dev.logchange.hofund.connection.spring.datasource.oracle.OracleConnection; import dev.logchange.hofund.connection.spring.datasource.postgresql.PostgreSQLConnection; import lombok.extern.slf4j.Slf4j; @@ -22,6 +23,7 @@ public static HofundDatabaseConnection of(DataSource dataSource) { return switch (dbType) { case POSTGRESQL -> new PostgreSQLConnection(metaData, dataSource).toHofundConnection(); case ORACLE -> new OracleConnection(metaData, dataSource).toHofundConnection(); + case H2 -> new H2Connection(metaData, dataSource).toHofundConnection(); default -> { log.warn("Currently there is no support for DataSource: {} please create issue at: https://github.com/logchange/hofund", productName); yield null; diff --git a/hofund-spring/src/main/java/dev/logchange/hofund/connection/spring/datasource/DatabaseProductName.java b/hofund-spring/src/main/java/dev/logchange/hofund/connection/spring/datasource/DatabaseProductName.java index 61d4f9e..b530de4 100644 --- a/hofund-spring/src/main/java/dev/logchange/hofund/connection/spring/datasource/DatabaseProductName.java +++ b/hofund-spring/src/main/java/dev/logchange/hofund/connection/spring/datasource/DatabaseProductName.java @@ -10,6 +10,7 @@ public enum DatabaseProductName { POSTGRESQL("PostgreSQL"), ORACLE("Oracle"), + H2("H2"), NOT_RECOGNIZED("Not recognized"); private final String name; diff --git a/hofund-spring/src/main/java/dev/logchange/hofund/connection/spring/datasource/h2/H2Connection.java b/hofund-spring/src/main/java/dev/logchange/hofund/connection/spring/datasource/h2/H2Connection.java new file mode 100644 index 0000000..fab9e67 --- /dev/null +++ b/hofund-spring/src/main/java/dev/logchange/hofund/connection/spring/datasource/h2/H2Connection.java @@ -0,0 +1,55 @@ +package dev.logchange.hofund.connection.spring.datasource.h2; + +import dev.logchange.hofund.connection.spring.datasource.DatasourceConnection; +import lombok.extern.slf4j.Slf4j; + +import javax.sql.DataSource; +import java.sql.DatabaseMetaData; +import java.sql.SQLException; +import java.util.Locale; + +@Slf4j +public class H2Connection extends DatasourceConnection { + + private static final String TEST_QUERY = "SELECT 1"; + + private String target; + private String url; + private String dbVendor; + + public H2Connection(DatabaseMetaData metaData, DataSource dataSource) { + super(dataSource, TEST_QUERY); + try { + this.url = metaData.getURL(); + int slashIndex = url.lastIndexOf('/'); + int to = url.length(); + if (url.lastIndexOf("?") != -1) { + to = url.lastIndexOf("?"); + } + this.target = url.substring(slashIndex + 1, to).toLowerCase(Locale.ROOT); + this.dbVendor = metaData.getDatabaseProductName(); + log.info("H2 info: target: {}, url: {}, dbVendor: {}", target, url, dbVendor); + } catch (SQLException e) { + log.warn("Error getting db information", e); + this.target = "ERROR"; + this.url = "ERROR"; + this.dbVendor = "ERROR"; + } + } + + @Override + protected String getTarget() { + return target; + } + + @Override + protected String getUrl() { + return url; + } + + @Override + protected String getDbVendor() { + return dbVendor; + } + +}