From b5eb5dc0b964a2026ecc43b99cb48070346fffa6 Mon Sep 17 00:00:00 2001 From: P0nk Date: Thu, 26 Jun 2025 15:35:26 +0200 Subject: [PATCH] Liquibase POC --- pom.xml | 7 +++- .../java/database/DatabaseMigrations.java | 35 +++++++++++++++++++ src/main/java/net/server/Server.java | 3 ++ src/main/resources/db/changelog.xml | 13 +++++++ src/main/resources/db/test-liquibase.sql | 4 +++ 5 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 src/main/java/database/DatabaseMigrations.java create mode 100644 src/main/resources/db/changelog.xml create mode 100644 src/main/resources/db/test-liquibase.sql diff --git a/pom.xml b/pom.xml index 373713bd7e..945a417fd8 100644 --- a/pom.xml +++ b/pom.xml @@ -66,6 +66,7 @@ 6.3.0 9.3.0 3.49.5 + 4.32.0 5.13.1 5.18.0 @@ -98,7 +99,11 @@ jdbi3-core ${jdbi-version} - + + org.liquibase + liquibase-core + ${liquibase-core.version} + diff --git a/src/main/java/database/DatabaseMigrations.java b/src/main/java/database/DatabaseMigrations.java new file mode 100644 index 0000000000..9033b3d689 --- /dev/null +++ b/src/main/java/database/DatabaseMigrations.java @@ -0,0 +1,35 @@ +package database; + +import liquibase.Liquibase; +import liquibase.UpdateSummaryOutputEnum; +import liquibase.database.jvm.JdbcConnection; +import liquibase.exception.LiquibaseException; +import liquibase.resource.ClassLoaderResourceAccessor; +import tools.DatabaseConnection; + +import java.sql.Connection; +import java.sql.SQLException; + +public class DatabaseMigrations { + + public static void runDatabaseMigrations() { + suppressLiquibaseLogs(); + runLiquibaseUpdate(); + } + + private static void suppressLiquibaseLogs() { + java.util.logging.Logger liquibaseLogger = java.util.logging.Logger.getLogger("liquibase"); + liquibaseLogger.setLevel(java.util.logging.Level.WARNING); + } + + private static void runLiquibaseUpdate() { + try (Connection connection = DatabaseConnection.getConnection()) { + liquibase.database.DatabaseConnection databaseConnection = new JdbcConnection(connection); + Liquibase liquibase = new Liquibase("db/changelog.xml", new ClassLoaderResourceAccessor(), databaseConnection); + liquibase.setShowSummaryOutput(UpdateSummaryOutputEnum.LOG); + liquibase.update(); + } catch (SQLException | LiquibaseException e) { + throw new RuntimeException("Failed to run database migrations", e); + } + } +} diff --git a/src/main/java/net/server/Server.java b/src/main/java/net/server/Server.java index 1b0159d2cc..6c61e5ce2a 100644 --- a/src/main/java/net/server/Server.java +++ b/src/main/java/net/server/Server.java @@ -36,6 +36,7 @@ import constants.game.GameConstants; import constants.inventory.ItemConstants; import constants.net.OpcodeConstants; import constants.net.ServerConstants; +import database.DatabaseMigrations; import database.note.NoteDao; import net.ChannelDependencies; import net.PacketProcessor; @@ -869,6 +870,8 @@ public class Server { throw new IllegalStateException("Failed to initiate a connection to the database"); } + DatabaseMigrations.runDatabaseMigrations(); + channelDependencies = registerChannelDependencies(); final ExecutorService initExecutor = Executors.newFixedThreadPool(10); diff --git a/src/main/resources/db/changelog.xml b/src/main/resources/db/changelog.xml new file mode 100644 index 0000000000..a1f0567ef1 --- /dev/null +++ b/src/main/resources/db/changelog.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db/test-liquibase.sql b/src/main/resources/db/test-liquibase.sql new file mode 100644 index 0000000000..f6e0582883 --- /dev/null +++ b/src/main/resources/db/test-liquibase.sql @@ -0,0 +1,4 @@ +CREATE TABLE test_liquibase +( + id INT NOT NULL +); \ No newline at end of file