From 0f3ec2c57551a46342c73b2cc2c89cd3ece648c9 Mon Sep 17 00:00:00 2001 From: Len <40720638+destro174@users.noreply.github.com> Date: Sat, 13 Aug 2022 16:10:23 +0200 Subject: [PATCH] Finish database stuff --- .../com/alttd/playershops/PlayerShops.java | 7 +++- .../playershops/storage/DatabaseManager.java | 34 +++++++++++++++++-- .../playershops/storage/StorageManager.java | 4 --- 3 files changed, 37 insertions(+), 8 deletions(-) delete mode 100644 src/main/java/com/alttd/playershops/storage/StorageManager.java diff --git a/src/main/java/com/alttd/playershops/PlayerShops.java b/src/main/java/com/alttd/playershops/PlayerShops.java index 59ee1fa..64bb53b 100644 --- a/src/main/java/com/alttd/playershops/PlayerShops.java +++ b/src/main/java/com/alttd/playershops/PlayerShops.java @@ -8,6 +8,7 @@ import com.alttd.playershops.listener.BlockListener; import com.alttd.playershops.listener.PlayerListener; import com.alttd.playershops.listener.ShopListener; import com.alttd.playershops.shop.ShopType; +import com.alttd.playershops.storage.DatabaseManager; import lombok.Getter; import net.milkbowl.vault.economy.Economy; import org.bukkit.Bukkit; @@ -22,6 +23,8 @@ public class PlayerShops extends JavaPlugin { private Economy econ = null; @Getter private ShopHandler shopHandler; + @Getter + private DatabaseManager databaseManager; private ShopListener shopListener; private PlayerListener playerListener; @@ -36,7 +39,7 @@ public class PlayerShops extends JavaPlugin { } Bukkit.getLogger().info("Hooked into Vault economy provided by " + econ.getName()); reloadConfigs(); - + databaseManager = new DatabaseManager(instance); shopHandler = new ShopHandler(instance); registerListeners(); @@ -46,6 +49,8 @@ public class PlayerShops extends JavaPlugin { public void onDisable() { unRegisterListeners(); Bukkit.getScheduler().cancelTasks(this); + + databaseManager.unload(); } private boolean setupEconomy() { diff --git a/src/main/java/com/alttd/playershops/storage/DatabaseManager.java b/src/main/java/com/alttd/playershops/storage/DatabaseManager.java index 84e1541..f51d6af 100644 --- a/src/main/java/com/alttd/playershops/storage/DatabaseManager.java +++ b/src/main/java/com/alttd/playershops/storage/DatabaseManager.java @@ -8,7 +8,6 @@ import org.bukkit.scheduler.BukkitRunnable; import java.sql.Connection; import java.sql.DriverManager; -import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; @@ -52,6 +51,35 @@ public class DatabaseManager { return connection; } + private void closeDatabaseConnections() { + for (DatabaseConnection connection : CONNECTIONPOOL) { + if (connection == null || connection.isValid()) + continue; + + if (!connection.isActive()) { + connection.close(); + } else { + while (connection.isActive) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + // This should not be interrupted as this is saving all the shops in the background for us. + e.printStackTrace(); + } + } + connection.close(); + } + } + } + + public void unload() { + if (databaseQueue != null && !databaseQueue.isCancelled()) { + databaseQueue.cancel(); + databaseQueue.runTaskQueue(); + } + closeDatabaseConnections(); + } + class DatabaseConnection implements AutoCloseable { private Connection connection; private volatile boolean isActive; @@ -140,10 +168,10 @@ public class DatabaseManager { @Override public void run() { - runTask(); + runTaskQueue(); } - public synchronized void runTask() { + public synchronized void runTaskQueue() { if (databaseQueryQueue.isEmpty()) return; diff --git a/src/main/java/com/alttd/playershops/storage/StorageManager.java b/src/main/java/com/alttd/playershops/storage/StorageManager.java deleted file mode 100644 index af37ae2..0000000 --- a/src/main/java/com/alttd/playershops/storage/StorageManager.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.alttd.playershops.storage; - -public class StorageManager { -}