Liquibase POC
This commit is contained in:
7
pom.xml
7
pom.xml
@@ -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>
|
||||
|
||||
35
src/main/java/database/DatabaseMigrations.java
Normal file
35
src/main/java/database/DatabaseMigrations.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
13
src/main/resources/db/changelog.xml
Normal file
13
src/main/resources/db/changelog.xml
Normal 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>
|
||||
4
src/main/resources/db/test-liquibase.sql
Normal file
4
src/main/resources/db/test-liquibase.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
CREATE TABLE test_liquibase
|
||||
(
|
||||
id INT NOT NULL
|
||||
);
|
||||
Reference in New Issue
Block a user