From a5aa9f4aa13065e6a1148f973aa5158a4e011d2a Mon Sep 17 00:00:00 2001 From: LO Kam Tao Leo Date: Mon, 17 Oct 2022 20:20:59 +0100 Subject: [PATCH] Basic database function --- pom.xml | 14 ++++++++-- src/main/java/org/leolo/nrdatad/App.java | 7 +++++ .../org/leolo/nrdatad/ConfigurationManager.java | 8 ++++++ .../java/org/leolo/nrdatad/db/DatabaseManager.java | 7 +++++ .../leolo/nrdatad/db/mariadb/DatabaseManager.java | 30 ++++++++++++++++++++++ .../org/leolo/nrdatad/db/test/DatabaseManager.java | 3 +-- 6 files changed, 65 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index c3d9781..18f9739 100644 --- a/pom.xml +++ b/pom.xml @@ -14,8 +14,8 @@ UTF-8 - 1.7 - 1.7 + 1.8 + 1.8 @@ -96,6 +96,16 @@ + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + diff --git a/src/main/java/org/leolo/nrdatad/App.java b/src/main/java/org/leolo/nrdatad/App.java index 8f4f4ce..cef45fd 100644 --- a/src/main/java/org/leolo/nrdatad/App.java +++ b/src/main/java/org/leolo/nrdatad/App.java @@ -78,5 +78,12 @@ public class App { return; } config.getDatabaseManager().initPool(); + if(config.getDatabaseManager().checkConnection()) + log.atInfo().log("Database connected!"); + else{ + log.atFatal().log("Unable to connect to database."); + System.exit(1); + return; + } } } diff --git a/src/main/java/org/leolo/nrdatad/ConfigurationManager.java b/src/main/java/org/leolo/nrdatad/ConfigurationManager.java index 2d030c9..687054b 100644 --- a/src/main/java/org/leolo/nrdatad/ConfigurationManager.java +++ b/src/main/java/org/leolo/nrdatad/ConfigurationManager.java @@ -9,6 +9,7 @@ import java.io.IOException; import java.io.PrintStream; import java.io.PrintWriter; import java.util.*; +import java.util.function.BiConsumer; public final class ConfigurationManager { private static ConfigurationManager instance; @@ -116,4 +117,11 @@ public final class ConfigurationManager { prop.clear(); } + public Object getOrDefault(Object key, Object defaultValue) { + return prop.getOrDefault(key, defaultValue); + } + + public void forEach(BiConsumer action) { + prop.forEach(action); + } } diff --git a/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java b/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java index 5af26e7..7e383f3 100644 --- a/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java +++ b/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java @@ -1,6 +1,13 @@ package org.leolo.nrdatad.db; +import java.sql.Connection; +import java.sql.SQLException; + public interface DatabaseManager { public void initPool(); + + public boolean checkConnection(); + + public Connection getConnection() throws SQLException; } diff --git a/src/main/java/org/leolo/nrdatad/db/mariadb/DatabaseManager.java b/src/main/java/org/leolo/nrdatad/db/mariadb/DatabaseManager.java index 0388714..fab1e79 100644 --- a/src/main/java/org/leolo/nrdatad/db/mariadb/DatabaseManager.java +++ b/src/main/java/org/leolo/nrdatad/db/mariadb/DatabaseManager.java @@ -5,6 +5,8 @@ import org.apache.logging.log4j.Logger; import org.leolo.nrdatad.ConfigurationManager; import org.mariadb.jdbc.MariaDbPoolDataSource; +import java.sql.*; + public class DatabaseManager implements org.leolo.nrdatad.db.DatabaseManager{ Logger logger = LogManager.getLogger(); private MariaDbPoolDataSource ds; @@ -26,5 +28,33 @@ public class DatabaseManager implements org.leolo.nrdatad.db.DatabaseManager{ ":"+conf.getProperty("db.port", "3306")+ "/"+conf.getProperty("db.name"); logger.atDebug().log("URL={}",url); + try { + ds = new MariaDbPoolDataSource(url); + ds.setMinPoolSize(1); + ds.setMaxPoolSize(Integer.parseInt(conf.getOrDefault("db.poolsize", "20").toString())); + ds.setUser(conf.getProperty("db.user").toString()); + ds.setPassword(conf.getProperty("db.pwd").toString()); + } catch (SQLException e) { + logger.atFatal().withThrowable(e).log("Cannot connect to DB"); + System.exit(-2); + } + } + + @Override + public boolean checkConnection() { + try( + Connection conn = ds.getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT 1") + ){ + return rs.next(); + }catch(SQLException e){ + return false; + } + } + + @Override + public Connection getConnection() throws SQLException{ + return ds.getConnection(); } } diff --git a/src/test/java/org/leolo/nrdatad/db/test/DatabaseManager.java b/src/test/java/org/leolo/nrdatad/db/test/DatabaseManager.java index e4d843d..8aaacc9 100644 --- a/src/test/java/org/leolo/nrdatad/db/test/DatabaseManager.java +++ b/src/test/java/org/leolo/nrdatad/db/test/DatabaseManager.java @@ -1,8 +1,7 @@ package org.leolo.nrdatad.db.test; -public class DatabaseManager implements org.leolo.nrdatad.db.DatabaseManager { +public class DatabaseManager { - @Override public void initPool() { }