From 0272a9ef6843b9af5ce9f73f1eecc0d0242e8802 Mon Sep 17 00:00:00 2001 From: D3v1s0m Date: Sun, 18 Aug 2024 14:51:32 +0530 Subject: [PATCH] fix database connection url and closing. add ssl option --- .../pyr/znpcsplus/config/DatabaseConfig.java | 7 ++++++- .../pyr/znpcsplus/npc/NpcRegistryImpl.java | 1 + .../lol/pyr/znpcsplus/storage/NpcStorage.java | 3 +++ .../znpcsplus/storage/database/Database.java | 2 ++ .../pyr/znpcsplus/storage/mysql/MySQL.java | 20 +++++++++++++++++-- .../znpcsplus/storage/mysql/MySQLStorage.java | 8 +++++++- .../pyr/znpcsplus/storage/sqlite/SQLite.java | 12 +++++++++++ .../storage/sqlite/SQLiteStorage.java | 5 +++++ 8 files changed, 54 insertions(+), 4 deletions(-) diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/config/DatabaseConfig.java b/plugin/src/main/java/lol/pyr/znpcsplus/config/DatabaseConfig.java index 16b110e..a62e983 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/config/DatabaseConfig.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/config/DatabaseConfig.java @@ -30,9 +30,14 @@ public interface DatabaseConfig { @DefaultString("znpcsplus") String databaseName(); + @ConfKey("use-ssl") + @ConfComments("Should SSL be used when connecting to the database?") + @DefaultBoolean(false) + boolean useSSL(); + default String createConnectionURL(String dbType) { if (dbType.equalsIgnoreCase("mysql")) { - return "jdbc:mysql://" + host() + ":" + port() + "/" + databaseName() + "?useSSL=false&user=" + username() + "&password=" + password(); + return "jdbc:mysql://" + host() + ":" + port() + "/" + databaseName() + "?useSSL=" + useSSL(); } else { throw new IllegalArgumentException("Unsupported database type: " + dbType); } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcRegistryImpl.java b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcRegistryImpl.java index 45a50f9..da716b0 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcRegistryImpl.java @@ -207,5 +207,6 @@ public class NpcRegistryImpl implements NpcRegistry { public void unload() { npcList.forEach(npcEntry -> npcEntry.getNpc().delete()); + storage.close(); } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/storage/NpcStorage.java b/plugin/src/main/java/lol/pyr/znpcsplus/storage/NpcStorage.java index 63c51fb..702d9ca 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/storage/NpcStorage.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/storage/NpcStorage.java @@ -8,4 +8,7 @@ public interface NpcStorage { Collection loadNpcs(); void saveNpcs(Collection npcs); void deleteNpc(NpcEntryImpl npc); + default void close() { + + } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/storage/database/Database.java b/plugin/src/main/java/lol/pyr/znpcsplus/storage/database/Database.java index 1794abd..4e41696 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/storage/database/Database.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/storage/database/Database.java @@ -13,4 +13,6 @@ public abstract class Database { public abstract Connection getSQLConnection(); public abstract void load(); + + public abstract void close(); } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/storage/mysql/MySQL.java b/plugin/src/main/java/lol/pyr/znpcsplus/storage/mysql/MySQL.java index 7ffd709..ccdf79d 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/storage/mysql/MySQL.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/storage/mysql/MySQL.java @@ -10,10 +10,14 @@ import java.util.logging.Logger; public class MySQL extends Database { private final String connectionURL; + private final String username; + private final String password; - public MySQL(String connectionURL, Logger logger) { + public MySQL(String connectionURL, String username, String password, Logger logger) { super(logger); this.connectionURL = connectionURL; + this.username = username; + this.password = password; } @Override @@ -25,7 +29,7 @@ public class MySQL extends Database { return connection; } Class.forName("com.mysql.jdbc.Driver"); - connection = java.sql.DriverManager.getConnection(connectionURL); + connection = java.sql.DriverManager.getConnection(connectionURL, username, password); return connection; } catch (ClassNotFoundException ex) { logger.severe("MySQL JDBC library not found" + ex); @@ -56,6 +60,18 @@ public class MySQL extends Database { connection = getSQLConnection(); } + @Override + public void close() { + try { + if (connection != null) { + connection.close(); + } + } catch (SQLException e) { + logger.severe("An error occurred while closing the connection"); + e.printStackTrace(); + } + } + public boolean tableExists(String tableName) { try { Statement s = connection.createStatement(); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/storage/mysql/MySQLStorage.java b/plugin/src/main/java/lol/pyr/znpcsplus/storage/mysql/MySQLStorage.java index d1aa805..b7fe0cb 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/storage/mysql/MySQLStorage.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/storage/mysql/MySQLStorage.java @@ -46,7 +46,8 @@ public class MySQLStorage implements NpcStorage { this.typeRegistry = typeRegistry; this.propertyRegistry = propertyRegistry; this.textSerializer = textSerializer; - this.database = new MySQL(configManager.getConfig().databaseConfig().createConnectionURL("mysql"), logger); + this.database = new MySQL(configManager.getConfig().databaseConfig().createConnectionURL("mysql"), + configManager.getConfig().databaseConfig().username(), configManager.getConfig().databaseConfig().password(), logger); database.load(); if (database.getSQLConnection() == null) { throw new RuntimeException("Failed to initialize MySQL Storage"); @@ -313,4 +314,9 @@ public class MySQLStorage implements NpcStorage { exception.printStackTrace(); } } + + @Override + public void close() { + database.close(); + } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/storage/sqlite/SQLite.java b/plugin/src/main/java/lol/pyr/znpcsplus/storage/sqlite/SQLite.java index f44944c..ff1a273 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/storage/sqlite/SQLite.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/storage/sqlite/SQLite.java @@ -41,6 +41,18 @@ public class SQLite extends Database{ connection = getSQLConnection(); } + @Override + public void close() { + try { + if (connection != null) { + connection.close(); + } + } catch (SQLException e) { + logger.severe("An error occurred while closing the connection"); + e.printStackTrace(); + } + } + public boolean tableExists(String tableName) { try { Statement s = connection.createStatement(); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/storage/sqlite/SQLiteStorage.java b/plugin/src/main/java/lol/pyr/znpcsplus/storage/sqlite/SQLiteStorage.java index 2eb004e..0dc7592 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/storage/sqlite/SQLiteStorage.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/storage/sqlite/SQLiteStorage.java @@ -312,4 +312,9 @@ public class SQLiteStorage implements NpcStorage { exception.printStackTrace(); } } + + @Override + public void close() { + database.close(); + } }