From 23ab4b87545243cf03429b608a0338583ea5de32 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Thu, 15 Jan 2026 09:06:33 +0000 Subject: [PATCH] Optimize SQLUpdater to run asynchronously - Refactored SQLManager to support fetching data with a new connection - Implemented updateAsync() to fetch off-thread and apply on main thread - Updated SQLUpdater to schedule async task - Fixed PlaceholderAPI dependency in pom.xml --- modules/GuildManager/pom.xml | 4 +- .../mcatk/guildmanager/sql/SQLManager.java | 41 +++++++++++++++---- .../mcatk/guildmanager/sql/SQLUpdater.java | 2 +- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/modules/GuildManager/pom.xml b/modules/GuildManager/pom.xml index 4f5f6c8..0463171 100644 --- a/modules/GuildManager/pom.xml +++ b/modules/GuildManager/pom.xml @@ -109,8 +109,8 @@ provided - me.clip - placeholderapi + com.github.PlaceholderAPI + PlaceholderAPI 2.11.1 provided diff --git a/modules/GuildManager/src/main/java/com/mcatk/guildmanager/sql/SQLManager.java b/modules/GuildManager/src/main/java/com/mcatk/guildmanager/sql/SQLManager.java index 29cec3c..5c27443 100644 --- a/modules/GuildManager/src/main/java/com/mcatk/guildmanager/sql/SQLManager.java +++ b/modules/GuildManager/src/main/java/com/mcatk/guildmanager/sql/SQLManager.java @@ -4,6 +4,8 @@ import com.mcatk.guildmanager.models.Guild; import com.mcatk.guildmanager.models.Member; +import org.bukkit.Bukkit; + import java.sql.*; import java.util.ArrayList; import java.util.HashMap; @@ -23,17 +25,21 @@ private SQLManager() { guilds = getAllGuildsFromSQL(); } - private void connectMySQL() { + private Connection createConnection() throws SQLException { String ip = GuildManager.getPlugin().getConfig().getString("mysql.ip"); String databaseName = GuildManager.getPlugin().getConfig().getString("mysql.databasename"); String userName = GuildManager.getPlugin().getConfig().getString("mysql.username"); String userPassword = GuildManager.getPlugin().getConfig().getString("mysql.password"); int port = GuildManager.getPlugin().getConfig().getInt("mysql.port"); + return DriverManager.getConnection( + "jdbc:mysql://" + ip + ":" + port + "/" + databaseName + "?autoReconnect=true&useSSL=false", + userName, userPassword + ); + } + + private void connectMySQL() { try { - connection = DriverManager.getConnection( - "jdbc:mysql://" + ip + ":" + port + "/" + databaseName + "?autoReconnect=true&useSSL=false", - userName, userPassword - ); + connection = createConnection(); } catch (SQLException e) { e.printStackTrace(); } @@ -165,8 +171,12 @@ public HashMap getGuilds() { } private HashMap getAllGuildsFromSQL() { + return getAllGuildsFromSQL(this.connection); + } + + private HashMap getAllGuildsFromSQL(Connection conn) { HashMap guilds = new HashMap<>(); - try (PreparedStatement ps = connection.prepareStatement(SQLCommand.GET_ALL_GUILDS.toString())){ + try (PreparedStatement ps = conn.prepareStatement(SQLCommand.GET_ALL_GUILDS.toString())){ ResultSet rs = ps.executeQuery(); while (rs.next()) { Guild g = new Guild(); @@ -180,7 +190,7 @@ private HashMap getAllGuildsFromSQL() { g.setCash(rs.getInt("guild_cash")); g.setResidenceFLag(rs.getBoolean("guild_has_residence")); g.setHasChangedName(rs.getBoolean("guild_has_changed_name")); - g.setMembers(getMembersFromSQL(g.getId())); + g.setMembers(getMembersFromSQL(g.getId(), conn)); guilds.put(g.getId(), g); } } catch (SQLException e) { @@ -190,8 +200,12 @@ private HashMap getAllGuildsFromSQL() { } private ArrayList getMembersFromSQL(String guildID) { + return getMembersFromSQL(guildID, this.connection); + } + + private ArrayList getMembersFromSQL(String guildID, Connection conn) { ArrayList list = new ArrayList<>(); - try (PreparedStatement ps = connection.prepareStatement("SELECT * FROM `player_guild` WHERE guild_id = ?")){ + try (PreparedStatement ps = conn.prepareStatement("SELECT * FROM `player_guild` WHERE guild_id = ?")){ ps.setString(1, guildID); ResultSet rs = ps.executeQuery(); while (rs.next()) { @@ -217,5 +231,16 @@ public void update() { guilds = getAllGuildsFromSQL(); } + public void updateAsync() { + try (Connection conn = createConnection()) { + HashMap guilds = getAllGuildsFromSQL(conn); + Bukkit.getScheduler().runTask(GuildManager.getPlugin(), () -> { + this.guilds = guilds; + }); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } diff --git a/modules/GuildManager/src/main/java/com/mcatk/guildmanager/sql/SQLUpdater.java b/modules/GuildManager/src/main/java/com/mcatk/guildmanager/sql/SQLUpdater.java index 81a1fa6..7a0d471 100644 --- a/modules/GuildManager/src/main/java/com/mcatk/guildmanager/sql/SQLUpdater.java +++ b/modules/GuildManager/src/main/java/com/mcatk/guildmanager/sql/SQLUpdater.java @@ -5,6 +5,6 @@ public class SQLUpdater { public void run() { - Bukkit.getScheduler().runTaskTimer(GuildManager.getPlugin(), () -> SQLManager.getInstance().update(), 20L * 60L, 20L * 60L); + Bukkit.getScheduler().runTaskTimerAsynchronously(GuildManager.getPlugin(), () -> SQLManager.getInstance().updateAsync(), 20L * 60L, 20L * 60L); } }