Liquibase POC

This commit is contained in:
P0nk
2025-06-26 15:35:26 +02:00
parent 431eced76a
commit b5eb5dc0b9
5 changed files with 61 additions and 1 deletions

View File

@@ -66,6 +66,7 @@
<HikariCP.version>6.3.0</HikariCP.version> <!-- Database connection pool -->
<mysql-connector-j.version>9.3.0</mysql-connector-j.version> <!-- MySQL JDBC driver -->
<jdbi-version>3.49.5</jdbi-version> <!-- Convenience wrapper around JDBC -->
<liquibase-core.version>4.32.0</liquibase-core.version> <!-- Database migrations -->
<junit.version>5.13.1</junit.version> <!-- Unit test -->
<mockito.version>5.18.0</mockito.version> <!-- Unit test -->
</properties>
@@ -98,7 +99,11 @@
<artifactId>jdbi3-core</artifactId>
<version>${jdbi-version}</version>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>${liquibase-core.version}</version>
</dependency>
<!-- Networking -->
<dependency>

View File

@@ -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);
}
}
}

View File

@@ -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);

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd">
<changeSet id="1" author="Ponk">
<sqlFile path="db/test-liquibase.sql"/>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,4 @@
CREATE TABLE test_liquibase
(
id INT NOT NULL
);